Add support for certificate chaining for s/mime sign in Mail
This commit is contained in:
@@ -143,6 +143,7 @@ class Mail(object):
|
|||||||
mail.settings.encrypt = True
|
mail.settings.encrypt = True
|
||||||
mail.settings.x509_sign_keyfile = None
|
mail.settings.x509_sign_keyfile = None
|
||||||
mail.settings.x509_sign_certfile = None
|
mail.settings.x509_sign_certfile = None
|
||||||
|
mail.settings.x509_sign_chainfile = None
|
||||||
mail.settings.x509_nocerts = False
|
mail.settings.x509_nocerts = False
|
||||||
mail.settings.x509_crypt_certfiles = None
|
mail.settings.x509_crypt_certfiles = None
|
||||||
|
|
||||||
@@ -157,6 +158,10 @@ class Mail(object):
|
|||||||
... x509 only ...
|
... x509 only ...
|
||||||
x509_sign_keyfile : the signers private key filename (PEM format)
|
x509_sign_keyfile : the signers private key filename (PEM format)
|
||||||
x509_sign_certfile: the signers certificate filename (PEM format)
|
x509_sign_certfile: the signers certificate filename (PEM format)
|
||||||
|
x509_sign_chainfile: sets the optional all-in-one file where you
|
||||||
|
can assemble the certificates of Certification
|
||||||
|
Authorities (CA) which form the certificate
|
||||||
|
chain of email certificate (PEM format)
|
||||||
x509_nocerts : if True then no attached certificate in mail
|
x509_nocerts : if True then no attached certificate in mail
|
||||||
x509_crypt_certfiles: the certificates file to encrypt the messages
|
x509_crypt_certfiles: the certificates file to encrypt the messages
|
||||||
with can be a file name or a list of
|
with can be a file name or a list of
|
||||||
@@ -259,6 +264,7 @@ class Mail(object):
|
|||||||
settings.encrypt = True
|
settings.encrypt = True
|
||||||
settings.x509_sign_keyfile = None
|
settings.x509_sign_keyfile = None
|
||||||
settings.x509_sign_certfile = None
|
settings.x509_sign_certfile = None
|
||||||
|
settings.x509_sign_chainfile = None
|
||||||
settings.x509_nocerts = False
|
settings.x509_nocerts = False
|
||||||
settings.x509_crypt_certfiles = None
|
settings.x509_crypt_certfiles = None
|
||||||
settings.debug = False
|
settings.debug = False
|
||||||
@@ -583,6 +589,7 @@ class Mail(object):
|
|||||||
self.error = "No sign and no encrypt is set but cipher type to x509"
|
self.error = "No sign and no encrypt is set but cipher type to x509"
|
||||||
return False
|
return False
|
||||||
x509_sign_keyfile = self.settings.x509_sign_keyfile
|
x509_sign_keyfile = self.settings.x509_sign_keyfile
|
||||||
|
x509_sign_chainfile = self.settings.x509_sign_chainfile
|
||||||
if self.settings.x509_sign_certfile:
|
if self.settings.x509_sign_certfile:
|
||||||
x509_sign_certfile = self.settings.x509_sign_certfile
|
x509_sign_certfile = self.settings.x509_sign_certfile
|
||||||
else:
|
else:
|
||||||
@@ -608,6 +615,11 @@ class Mail(object):
|
|||||||
try:
|
try:
|
||||||
s.load_key(x509_sign_keyfile, x509_sign_certfile,
|
s.load_key(x509_sign_keyfile, x509_sign_certfile,
|
||||||
callback=lambda x: sign_passphrase)
|
callback=lambda x: sign_passphrase)
|
||||||
|
if x509_sign_chainfile:
|
||||||
|
sk = X509.X509_Stack()
|
||||||
|
chain = X509.load_cert(x509_sign_chainfile)
|
||||||
|
sk.push(chain)
|
||||||
|
s.set_x509_stack(sk)
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
self.error = "Something went wrong on certificate / private key loading: <%s>" % str(e)
|
self.error = "Something went wrong on certificate / private key loading: <%s>" % str(e)
|
||||||
return False
|
return False
|
||||||
|
|||||||
Reference in New Issue
Block a user