Exemplo n.º 1
0
    def _verify_signed_message(self, content_type):
        if content_type != 'multipart/signed':
            raise AS2MdnException('content-type invalid when signed required')

        mdn_signature_thumbprint = self.context.agreement.outbound_agreement.message_encryption_certificate.thumbprint
        mdn_signature_cert_path = self.context.agreement.outbound_agreement.message_encryption_certificate.local_file_path
        mdn_signature_cert_ca_path = self.context.agreement.outbound_agreement.message_encryption_certificate.local_ca_file_path
        mdn_signature_cert_verify = self.context.agreement.outbound_agreement.message_encryption_certificate.is_need_verify

        try:
            if is_none_or_whitespace(mdn_signature_cert_ca_path):
                mdn_signature_cert_ca_path = mdn_signature_cert_path

            f_mime_string = SMIMEHelper.format_with_cr_lf(
                SMIMEHelper.mime_to_string(self.mime_message))

            SMIMEHelper.verify_signed_text(f_mime_string,
                                           mdn_signature_cert_path,
                                           mdn_signature_cert_ca_path,
                                           mdn_signature_cert_verify)

            self.context.trace(
                "mdn signature verify finished; thumbprint: {thumbprint}, verify certificate: {verify}",
                thumbprint=mdn_signature_thumbprint,
                verify=mdn_signature_cert_verify)
        except:
            logger.exception(
                "mdn signature verify failed; mdn-message-id: {id}".format(
                    id=self.mdn_message_id))
            raise AS2MdnException(
                "mdn signature verify failed; thumbprint: {thumbprint}, verify certificate: {verify}, due to: {message}",
                thumbprint=mdn_signature_thumbprint,
                verify=mdn_signature_cert_verify,
                message=sys.exc_info()[1])
Exemplo n.º 2
0
    def _verify_signature(self):
        if not self.is_signed:
            self.context.trace("verify signature ignored")
            return

        content_type = self.mime_message.get_content_type().lower()
        if content_type != 'multipart/signed':
            raise AS2VerifySignatureException('verify signature failed; content-type:{type} invalid',
                                              type=content_type)

        cert_thumbprint = self.context.agreement.inbound_agreement.message_verify_certificate.thumbprint
        cert_local_file_path = self.context.agreement.inbound_agreement.message_verify_certificate.local_file_path
        cert_ca_local_file_path = self.context.agreement.inbound_agreement.message_verify_certificate.local_ca_file_path
        cert_verify = self.context.agreement.inbound_agreement.message_verify_certificate.is_need_verify

        try:
            if is_none_or_whitespace(cert_ca_local_file_path):
                cert_ca_local_file_path = cert_local_file_path

            for part in self.mime_message.get_payload():
                if not isinstance(part, email.message.Message):
                    continue
                part_type = part.get_content_type().lower()
                part_encoding = part.get('Content-Transfer-Encoding', '').lower()
                if 'application/pkcs7-signature' == part_type and 'base64' != part_encoding:
                    del part['Content-Transfer-Encoding']
                    email.encoders.encode_base64(part)
                    self.context.trace('signature content transfer encoding to base64')

            f_mime_string = SMIMEHelper.format_with_cr_lf(
                SMIMEHelper.mime_to_string(self.mime_message))

            SMIMEHelper.verify_signed_text(
                f_mime_string,
                cert_local_file_path,
                cert_ca_local_file_path,
                cert_verify)

            self.mic_algorithm = self.mime_message.get_param('micalg').lower()

            parts = [part for part in self.mime_message.walk() if
                     part.get_content_type() not in ['multipart/signed', 'application/pkcs7-signature']]

            if len(parts) != 1:
                raise AS2VerifySignatureException(
                    "verify signature failed; due to multiple part content in mime message")

            self.mime_message = parts[0]

            self.context.trace("verify signature finished; thumbprint: {thumbprint}, verify certificate: {verify}",
                               thumbprint=cert_thumbprint,
                               verify=cert_verify)
        except:
            logger.exception("verify signature failed; message-id: {id}".format(id=self.message_id))
            raise AS2VerifySignatureException(
                "verify signature failed; thumbprint: {thumbprint}, verify certificate: {verify}, due to: {message}",
                thumbprint=cert_thumbprint,
                verify=cert_verify,
                message=sys.exc_info()[1])
Exemplo n.º 3
0
    def test_mime_to_string_public_cert_without_ca_des_ede3_cbc(self):
        crt_path = self.__get_cert_path('P1_public.cer')
        alg = "des_ede3_cbc"

        rst = SMIMEHelper.encrypt_to_mime(self.clearText, crt_path, alg)
        msg = SMIMEHelper.mime_to_string(rst, 0)

        assert_not_equal(None, msg)
        assert_equal(True, "MIME-Version" in msg)
Exemplo n.º 4
0
    def test_format_with_cr_lf_public_cert_without_ca_des_ede3_cbc(self):
        crt_path = self.__get_cert_path('P1_public.cer')
        alg = "des_ede3_cbc"

        rst = SMIMEHelper.encrypt_to_mime(self.clearText, crt_path, alg)
        msg = SMIMEHelper.mime_to_string(rst)
        f_msg = SMIMEHelper.format_with_cr_lf(msg)

        assert_not_equal(msg, f_msg)
        assert_equal(True, "\r\n" in f_msg)
Exemplo n.º 5
0
    def test_get_signature_from_mime_without_Override(self):
        crt_path = self.__get_cert_path('edi04_with_ca.pem')
        pass_phrase = "newegg@123"

        rst = SMIMEHelper.sign_to_mime_detached(self.clearText, crt_path, pass_phrase)

        signature = SMIMEHelper.get_signature_from_mime(rst, False, 'application/pkcs7-signature')

        assert_not_equal(None, signature)
        assert_equal(True, "Content-Disposition" in signature)
        assert_equal(True, "Content-Type" in signature)
Exemplo n.º 6
0
    def test_compress_to_mime(self):
        mime = SMIMEHelper.compress_to_mime(self.clearText)

        assert_not_equal(None, mime)
        assert_equal(mime['Content-Transfer-Encoding'], 'base64')
        assert_equal(mime['Content-Disposition'], 'attachment; filename="smime.p7z"')
        assert_equal(True, 'smime-type="compressed-data"' in mime['Content-Type'])
Exemplo n.º 7
0
    def _decompress(self):
        if not self.is_compressed:
            self.context.trace("decompress ignored")
            return

        content_type = self.mime_message.get_content_type().lower()
        s_mime_type = self.mime_message.get_param('smime-type')

        if content_type != 'application/pkcs7-mime':
            raise AS2DeCompressException('decompress failed; content-type:{type} invalid',
                                         type=content_type)
        if s_mime_type != 'compressed-data':
            raise AS2DecryptException('decompress failed; s/mime-type:{type} invalid', type=s_mime_type)

        try:
            decompress_content = self.mime_message.get_payload(decode=True)

            content = SMIMEHelper.decompress_text(decompress_content)

            self.mime_message = email.message_from_string(content)

            self.context.trace("decompress finished")
        except:
            logger.exception("decompress failed; message-id: {id}".format(id=self.message_id))
            raise AS2DeCompressException(
                "decompress failed; due to: {message}", message=sys.exc_info()[1])
Exemplo n.º 8
0
    def test_decrypt_private_key_without_ca_des_ede3_cbc(self):
        encrypted_text = '''MIME-Version: 1.0
Content-Disposition: attachment; filename="smime.p7m"
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data;
 name="smime.p7m"
Content-Transfer-Encoding: base64

MIICAgYJKoZIhvcNAQcDoIIB8zCCAe8CAQAxggGrMIIBpwIBADCBjjCBgDELMAkG
A1UEBhMCQ04xCzAJBgNVBAgMAlNDMQswCQYDVQQHDAJDRDEPMA0GA1UECgwGTmV3
ZWdnMQwwCgYDVQQLDANFREkxGDAWBgNVBAMMD0FTMiBDZXJ0aWZpY2F0ZTEeMBwG
CSqGSIb3DQEJARYPdHIyOUBuZXdlZ2cuY29tAgkAtl4VWyGqGb4wDQYJKoZIhvcN
AQEBBQAEggEAzzzLpEFOzQDULtCBBcoDLobNGXSPUfSI45uatdlnqrwh8EsG2qan
Wbti6jMRIm6jvVX7u/lrI/gNK/zpWiMvg3VIgCN1vgPRE808Tx//EPXbyFH+ODGT
n/n77he+krbKY7kFwv86udat2OjzMaGjeQpQ2ILW3YYsf+Ce0zCa/AA0IYQeiZVN
G1ksb3kLstdYsU7hOi6OhgZlAYPZSe3zwnEjqe/uToOl8XedEkvmQvNbNbwEzJhB
44h9O7WTABD8DBHydgPahrOWqmcAOdPRjHHyRSnsss9HY9dCFjLHjiWexSszYLAr
5FgGcwITA+YSAMM3fujgFhJFAp1Z/xtQuDA7BgkqhkiG9w0BBwEwFAYIKoZIhvcN
AwcECIa9BZlgtfVYgBh82ue/PhnoQ6/wrwekWNPOkVJN8kX2xPw=
'''

        key_file_path = u'' + self.__get_cert_path('P1_private.pem')
        pass_phrase = u"123456"

        rst = SMIMEHelper.decrypt_from_text(encrypted_text, key_file_path, pass_phrase)

        assert_equal(self.clearText, rst)
Exemplo n.º 9
0
    def test_decrypt_private_key_with_ca_aes_128_cbc(self):
        encrypted_text = '''MIME-Version: 1.0
Content-Disposition: attachment; filename="smime.p7m"
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data;
 name="smime.p7m"
Content-Transfer-Encoding: base64

MIICQgYJKoZIhvcNAQcDoIICMzCCAi8CAQAxggHsMIIB6AIBADCBzzCBujELMAkG
A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3
d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu
dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEuMCwGA1UEAxMl
RW50cnVzdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEwxSwIQHnF4IP05B10A
AAAAUNw1czANBgkqhkiG9w0BAQEFAASCAQCeEwTDvzE8KQgO+Pt/vcGfj/ZMKu20
dJz6AufIIBvHmWIQFGAL/PQ3Fk/Awxcyvz9/LvOXvNEAHnxifRXb2LqnoW+Uxoys
gY7eccsx/cQleZ+/GIeY3INPF74BX7ywzhxjy018wvfY8PkuCtWSe8vYKZTmksY4
qdrFxaWIhLHHZDNbRaZ/vrk/BpxZvm5BQdd1B1+g6E8+PVNX8Z/lJXcHmpkdKmEe
WZZtqYUQoZpp70eMPMifl0Beyp2bgP6DwGvPmk2Wv7pNE1+wu3K7C5XoAQ6NfeZp
bhu51OP2Rb28NFwFqSt984vbThCzaRDZyL4eLi5oUtw5H8L7IUQuh3Z2MDoGCSqG
SIb3DQEHATALBglghkgBZQMEAQGAIIIt/NjfM683MbhOQTMf3JuRgSYHx+je3OjP
GnNVcfZP
'''

        key_file_path = self.__get_cert_path('edi04_with_ca.pem')
        pass_phrase = "newegg@123"

        rst = SMIMEHelper.decrypt_from_text(encrypted_text, key_file_path, pass_phrase)

        assert_equal(self.clearText, rst)
Exemplo n.º 10
0
    def test_sign_private_cert_with_ca_sha_1(self):
        crt_path = self.__get_cert_path('edi04_with_ca.pem')
        pass_phrase = "newegg@123"

        rst = SMIMEHelper.sign_to_mime_detached(self.clearText, crt_path, pass_phrase)

        assert_not_equal(None, rst)
        assert_equal('sha1', rst.get_param('micalg'))
Exemplo n.º 11
0
    def test_encrypt_public_cert_without_ca_aes_128_cbc(self):
        crt_path = self.__get_cert_path('P1_public.cer')
        alg = "aes_128_cbc"

        rst = SMIMEHelper.encrypt_to_mime(self.clearText, crt_path, alg)

        assert_not_equal(None, rst._headers)
        assert_equal(('MIME-Version', '1.0'), rst._headers[0])
Exemplo n.º 12
0
    def test_encrypt_public_cert_with_ca_des_ede3_cbc(self):
        crt_path = self.__get_cert_path('mercury_ingrammicro_com.sha256.cer')
        alg = "des_ede3_cbc"

        rst = SMIMEHelper.encrypt_to_mime(self.clearText, crt_path, alg)

        assert_not_equal(None, rst._headers)
        assert_equal(('MIME-Version', '1.0'), rst._headers[0])
Exemplo n.º 13
0
    def test_encrypt_public_cert_with_ca_des_ede3_cbc(self):
        crt_path = self.__get_cert_path('edi04_with_ca.crt')
        alg = "des_ede3_cbc"

        rst = SMIMEHelper.encrypt_to_mime(self.clearText, crt_path, alg)

        assert_not_equal(None, rst._headers)
        assert_equal(('MIME-Version', '1.0'), rst._headers[0])
Exemplo n.º 14
0
    def test_extract_payload_with_multipart(self):
        signed_mime_message = MIMEMultipart('signed', protocol="application/pkcs7-signature")

        payload = SMIMEHelper.extract_payload(signed_mime_message)

        assert_not_equal(None, payload)
        assert_not_equal("", payload)
        assert_equal(True, payload.startswith("--"))
Exemplo n.º 15
0
    def test_sign_private_cert_with_china_without_ca_sha_1(self):
        clearText = '测试文件'
        crt_path = self.__get_cert_path('P1_private.pem')
        pass_phrase = "123456"

        rst = SMIMEHelper.sign_to_mime_detached(clearText, crt_path, pass_phrase)

        assert_not_equal(None, rst)
        assert_equal('sha1', rst.get_param('micalg'))
Exemplo n.º 16
0
    def test_decompress_text(self):
        b64_decompress_content = '''ME8GCyqGSIb3DQEJEAEJoEAwPgIBADANBgsqhkiG9w0BCRADCDAqBgkqhkiG9w0BBwGgHQQbeJwL
        ycgsVgCiktTiEoXc1OLixPRUPQBULQeo
        '''

        decompress_content = base64.decodestring(b64_decompress_content)
        content = SMIMEHelper.decompress_text(decompress_content)

        assert_equal(content, self.clearText)
Exemplo n.º 17
0
    def test_sign_private_cert_with_iso_8859_01_without_ca_sha_1(self):
        clearText = 'ISA¦00¦          ¦00¦          ¦16¦081940553PA10  ¦ZZ¦5626958823BVF  ¦170522¦1940¦U¦00401¦001038283¦0¦P¦`~'
        crt_path = self.__get_cert_path('P1_private.pem')
        pass_phrase = "123456"

        rst = SMIMEHelper.sign_to_mime_detached(clearText, crt_path, pass_phrase)

        assert_not_equal(None, rst)
        assert_equal('sha1', rst.get_param('micalg'))
Exemplo n.º 18
0
    def test_sign_private_cert_without_ca_md5(self):
        crt_path = self.__get_cert_path('P1_private.pem')
        pass_phrase = "123456"
        alg = 'md5'

        rst = SMIMEHelper.sign_to_mime_detached(self.clearText, crt_path, pass_phrase, alg)

        assert_not_equal(None, rst)
        assert_equal('md5', rst.get_param('micalg'))
Exemplo n.º 19
0
    def _decrypt(self):
        if not self.is_encrypted:
            self.context.trace("decrypt ignored")
            return

        content_type = self.mime_message.get_content_type().lower()
        s_mime_type = self.mime_message.get_param('smime-type')

        if content_type != 'application/pkcs7-mime':
            raise AS2DecryptException('decrypt failed; content-type:{type} invalid', type=content_type)

        if s_mime_type != 'enveloped-data':
            raise AS2DecryptException('decrypt failed; s/mime-type:{type} invalid', type=s_mime_type)

        cert_thumbprint = self.context.agreement.inbound_agreement.message_decrypt_certificate.thumbprint
        cert_local_file_path = self.context.agreement.inbound_agreement.message_decrypt_certificate.local_file_path
        cert_pass_phrase = self.context.agreement.inbound_agreement.message_decrypt_certificate.pass_phrase

        try:
            content_transfer_encoding = self.mime_message.get('Content-Transfer-Encoding', '').lower()
            if 'base64' != content_transfer_encoding:
                del self.mime_message['Content-Transfer-Encoding']
                email.encoders.encode_base64(self.mime_message)
                self.context.trace('content transfer encoding to base64')

            f_mime_string = SMIMEHelper.format_with_cr_lf(
                SMIMEHelper.mime_to_string(self.mime_message, 78)
            )

            decrypted_content = SMIMEHelper.decrypt_from_text(
                f_mime_string,
                cert_local_file_path,
                cert_pass_phrase
            )

            self.mime_message = email.message_from_string(decrypted_content)

            self.context.trace("decrypt finished; thumbprint: {thumbprint}",
                               thumbprint=cert_thumbprint)
        except:
            logger.exception("decrypt failed; message-id: {id}".format(id=self.message_id))
            raise AS2DecryptException("decrypt failed; thumbprint: {thumbprint}, due to: {message}",
                                      thumbprint=cert_thumbprint,
                                      message=sys.exc_info()[1])
Exemplo n.º 20
0
    def test_extract_payload(self):
        text_plain = "test message"

        mime_message = email.Message.Message()
        mime_message.set_payload(text_plain)

        payload = SMIMEHelper.extract_payload(mime_message)

        assert_not_equal(None, payload)
        assert_not_equal("", payload)
        assert_equal(text_plain, payload)
Exemplo n.º 21
0
    def _compress(self):
        if not self.is_compressed:
            self.context.trace("compress ignored")
            return

        try:
            f_mime_string = SMIMEHelper.format_with_cr_lf(
                SMIMEHelper.mime_to_string(self.mime_message))

            self.mic_content = f_mime_string

            self.mime_message = SMIMEHelper.compress_to_mime(f_mime_string)
            del self.mime_message['MIME-Version']

            self.body = self.mime_message.get_payload()

            self.context.trace("compress finished")
        except:
            logger.exception("compress failed; message-id: {id}".format(id=self.message_id))
            raise AS2CompressException("compress failed; due to: {message}", message=sys.exc_info()[1])
Exemplo n.º 22
0
    def encode(self):
        try:
            self._init_mode(self.context.message.message_mdn.mdn_mode)

            self._init_message_id(self.context.message.message_mdn)

            self._init_disposition(self.context.message.message_mdn)

            self._init_mic(self.context.message.message_is_mic,
                           self.context.message.message_mdn)

            mdn_report = MIMEMultipart(
                'report',
                boundary=SMIMEHelper.get_random_boundary(),
                report_type="disposition-notification")

            mdn_confirmation_text = self._build_confirmation_mime()
            mdn_feedback_content = self._build_feedback_content_mime()

            mdn_report.attach(mdn_confirmation_text)
            mdn_report.attach(mdn_feedback_content)
            del mdn_report['MIME-Version']

            if self.context.agreement.inbound_agreement.is_mdn_signed:
                mdn_message = self._signature_mdn_mime(mdn_report)
            else:
                mdn_message = mdn_report
                self.context.trace("mdn signature ignore")

            mdn_headers = self._build_mdn_headers(mdn_message)

            mdn_body = SMIMEHelper.format_with_cr_lf(
                SMIMEHelper.extract_payload(mdn_message))

            return mdn_headers, mdn_body
        except AS2MdnException as ex:
            self.context.trace_error(ex.msg)
            raise
        except:
            self.context.trace_error(sys.exc_info()[1])
            raise
Exemplo n.º 23
0
    def _signature_mdn_mime(self, mdn_report):
        signed_mdn_report = MIMEMultipart(
            'signed',
            boundary=SMIMEHelper.get_random_boundary(),
            protocol="application/pkcs7-signature")
        signed_mdn_report.attach(mdn_report)

        cert_thumbprint = self.context.agreement.outbound_agreement.message_signature_certificate.thumbprint
        cert_local_file_path = self.context.agreement.outbound_agreement.message_signature_certificate.local_file_path
        cert_pass_phrase = self.context.agreement.outbound_agreement.message_signature_certificate.pass_phrase
        cert_signature_algorithm = self.context.agreement.inbound_agreement.mdn_signature_algorithm

        try:
            mime_message = SMIMEHelper.sign_to_mime_detached(
                SMIMEHelper.format_with_cr_lf(
                    SMIMEHelper.mime_to_string(mdn_report)),
                cert_local_file_path, cert_pass_phrase,
                cert_signature_algorithm)

            signature = SMIMEHelper.get_signature_from_mime(mime_message)
            del signature['MIME-Version']

            signed_mdn_report.set_param('micalg', cert_signature_algorithm)
            signed_mdn_report.attach(signature)

            self.context.trace(
                "mdn signature finished; thumbprint: {thumbprint}, algorithm: {algorithm}",
                thumbprint=cert_thumbprint,
                algorithm=cert_signature_algorithm)
        except:
            logger.exception('sign mdn failed')
            raise AS2MdnException(
                "mdn signature failed; thumbprint: {thumbprint}, algorithm: {algorithm}, due to: {message}",
                thumbprint=cert_thumbprint,
                algorithm=cert_signature_algorithm,
                message=sys.exc_info()[1])

        return signed_mdn_report
Exemplo n.º 24
0
    def _encryption(self):
        if not self.is_encrypted:
            self.context.trace("encryption ignored")
            return

        cert_thumbprint = self.context.agreement.outbound_agreement.message_encryption_certificate.thumbprint
        cert_local_file_path = self.context.agreement.outbound_agreement.message_encryption_certificate.local_file_path
        cert_encrypt_algorithm = self.context.agreement.outbound_agreement.message_encryption_algorithm

        try:
            f_mime_string = SMIMEHelper.format_with_cr_lf(
                SMIMEHelper.mime_to_string(self.mime_message))

            # encrypt without sign and compress
            if not self.is_signed and not self.is_compressed:
                self.mic_content = f_mime_string

            encrypted_mime_message = SMIMEHelper.encrypt_to_mime(
                f_mime_string,
                cert_local_file_path,
                cert_encrypt_algorithm)

            encrypted_mime_message.set_type('application/pkcs7-mime')

            self.body = encrypted_mime_message.get_payload()
            self.mime_message = encrypted_mime_message

            self.context.trace("encryption finished; thumbprint: {thumbprint}, algorithm: {algorithm}",
                               thumbprint=cert_thumbprint,
                               algorithm=cert_encrypt_algorithm)
        except:
            logger.exception("encryption failed; message-id: {id}".format(id=self.message_id))
            raise AS2EncryptException(
                "encryption failed; thumbprint: {thumbprint}, algorithm: {algorithm}, due to: {message}",
                thumbprint=cert_thumbprint,
                algorithm=cert_encrypt_algorithm,
                message=sys.exc_info()[1])
Exemplo n.º 25
0
    def _signature(self):
        if not self.is_signed:
            self.context.trace("signature ignored")
            return

        cert_thumbprint = self.context.agreement.outbound_agreement.message_signature_certificate.thumbprint
        cert_local_file_path = self.context.agreement.outbound_agreement.message_signature_certificate.local_file_path
        cert_pass_phrase = self.context.agreement.outbound_agreement.message_signature_certificate.pass_phrase
        cert_signature_algorithm = self.context.agreement.outbound_agreement.message_signature_algorithm

        try:
            f_mime_string = SMIMEHelper.format_with_cr_lf(
                SMIMEHelper.mime_to_string(self.mime_message))

            self.mic_content = f_mime_string
            self.mic_algorithm = self.context.agreement.outbound_agreement.message_signature_algorithm

            detached_signed_message = SMIMEHelper.sign_to_mime_detached(
                f_mime_string,
                cert_local_file_path,
                cert_pass_phrase,
                cert_signature_algorithm)

            signature = SMIMEHelper.get_signature_from_mime(detached_signed_message)
            if signature is None:
                raise Exception("signature is none from detached signed mime message")

            signed_mime_message = MIMEMultipart('signed', boundary=SMIMEHelper.get_random_boundary(),
                                                protocol="application/pkcs7-signature")
            del signed_mime_message['MIME-Version']

            signed_mime_message.set_param('micalg', self.mic_algorithm)
            signed_mime_message.attach(self.mime_message)
            signed_mime_message.attach(signature)

            self.body = SMIMEHelper.format_with_cr_lf(SMIMEHelper.extract_payload(signed_mime_message))
            self.mime_message = signed_mime_message

            self.context.trace("signature finished; thumbprint: {thumbprint}, algorithm: {algorithm}",
                               thumbprint=cert_thumbprint,
                               algorithm=cert_signature_algorithm)
        except:
            logger.exception("signature failed; message-id: {id}".format(id=self.message_id))
            raise AS2SignatureException(
                "signature failed; thumbprint: {thumbprint}, algorithm: {algorithm}, due to: {message}",
                thumbprint=cert_thumbprint,
                algorithm=cert_signature_algorithm,
                message=sys.exc_info()[1])
Exemplo n.º 26
0
    def _build_certificate(self, cert_id):
        if cert_id is None:
            return None

        try:
            certificate = CloudStoreHelper().get_document(cert_id, Certificate)

            if certificate is None:
                raise Exception("as2 certificate is null")

            if certificate.type == CertificateType.public:
                certificate.local_file_path = os.path.join(
                    self.conf['app_root_dir'], "cert", "public",
                    certificate.thumbprint + ".pem")
            else:
                certificate.local_file_path = os.path.join(
                    self.conf['app_root_dir'], "cert", "private",
                    certificate.thumbprint + ".pem")

            if not is_none_or_whitespace(certificate.pass_phrase):
                certificate.pass_phrase = SMIMEHelper.aes_decrypt(
                    certificate.pass_phrase, self.conf['app_secure_key'])

            if os.path.exists(certificate.local_file_path):
                return certificate

            local_path = os.path.dirname(certificate.local_file_path)

            if not os.path.exists(local_path):
                os.makedirs(local_path)

            if not DFSHelper.download2file(certificate.dfs_file_path,
                                           certificate.local_file_path):
                raise Exception("download certificate file from dfs failed")

            return certificate
        except:
            raise Exception(
                "get as2 certificate failed; certificate-id: {id}, due to {msg}"
                .format(id=cert_id, msg=sys.exc_info()[1]))
Exemplo n.º 27
0
    def test_verify_multipart_signed_text_without_ca(self):
        signed_msg = '''MIME-Version: 1.0
Content-Type: multipart/signed; protocol="application/x-pkcs7-signature";
 micalg="sha1"; boundary="----E67033C32AF07C4C5BE242D36DB48F2F"

This is an S/MIME signed message

------E67033C32AF07C4C5BE242D36DB48F2F

This is test message.
------E67033C32AF07C4C5BE242D36DB48F2F
Content-Type: application/x-pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"

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
LrhHEL4SK7yeHG0bSM/D+t4EzgRohA==

------E67033C32AF07C4C5BE242D36DB48F2F--
'''
        f_signed_msg = SMIMEHelper.format_with_cr_lf(signed_msg)
        crt_path = self.__get_cert_path('P1_public.cer')
        ca_crt_path = self.__get_cert_path('P1_public.cer')
        is_verify_cert = True

        rst = SMIMEHelper.verify_signed_text(f_signed_msg, crt_path, ca_crt_path, is_verify_cert)

        assert_equal(self.clearText, rst.strip())
Exemplo n.º 28
0
    def test_verify_multipart_signed_text_with_ca(self):
        signed_msg = '''MIME-Version: 1.0
Content-Type: multipart/signed; protocol="application/x-pkcs7-signature";
 micalg="sha1"; boundary="----61FD602D4D31C5FCAE3D9C6C0E9789D2"

This is an S/MIME signed message

------61FD602D4D31C5FCAE3D9C6C0E9789D2
This is test message.
------61FD602D4D31C5FCAE3D9C6C0E9789D2
Content-Type: application/x-pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"

MIIIPwYJKoZIhvcNAQcCoIIIMDCCCCwCAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3
DQEHAaCCBTUwggUxMIIEGaADAgECAhAecXgg/TkHXQAAAABQ3DVzMA0GCSqGSIb3
DQEBCwUAMIG6MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjEo
MCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9sZWdhbC10ZXJtczE5MDcGA1UE
CxMwKGMpIDIwMTIgRW50cnVzdCwgSW5jLiAtIGZvciBhdXRob3JpemVkIHVzZSBv
bmx5MS4wLAYDVQQDEyVFbnRydXN0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0g
TDFLMB4XDTE3MDQxNDAwMTAxOVoXDTIwMDUwMjAwNDAxOFowbTELMAkGA1UEBhMC
VVMxEzARBgNVBAgTCkNhbGlmb3JuaWExGTAXBgNVBAcTEENpdHkgb2YgSW5kdXN0
cnkxEzARBgNVBAoTCk5ld2VnZyBJbmMxGTAXBgNVBAMTEGVkaTA0Lm5ld2VnZy5j
b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC/UKcNeFVX30ZANlx6
ElFDGDVGfV0s/qWOduQxsP6WRm4J93vYe2sYngAyM+r+P5IOVbC9VyA6GBeC2yzl
xLwV5eA50BfmpPRLEj+s86J8jV3yxs2NCku/kZqls/GvlpS78LWD51yhX8uoXvk+
4sHpt2xB83Ok5sGiSiq5I97gOsUwQc8ASsW6Ha5VTFymZu6dU7hTzgS0DSQwcNcA
G+fLHlMvAVfa0eW5y+bnFgXr15w/sfDigP1aAMb0oEeCKPLe2GDwJ6Av/M3GThI4
r6ZOLG9IDqt2dmJ5rcqeERfWZy3I7mtaWMEEeV7Cmy5M1KUvLPXWHbV4BcXiRcIH
C4DxAgMBAAGjggF9MIIBeTAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYB
BQUHAwEwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbnRydXN0Lm5ldC9s
ZXZlbDFrLmNybDBLBgNVHSAERDBCMDYGCmCGSAGG+mwKAQUwKDAmBggrBgEFBQcC
ARYaaHR0cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwCAYGZ4EMAQICMGgGCCsGAQUF
BwEBBFwwWjAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYI
KwYBBQUHMAKGJ2h0dHA6Ly9haWEuZW50cnVzdC5uZXQvbDFrLWNoYWluMjU2LmNl
cjAbBgNVHREEFDASghBlZGkwNC5uZXdlZ2cuY29tMB8GA1UdIwQYMBaAFIKicHTd
vFM/z3vU981/p2DGCky/MB0GA1UdDgQWBBSZd46F1MFczOuEYHhlf12dRxQPSjAJ
BgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQC2w2bTD/R7UNsJWQFqkiT4kcNp
/EJOeSPwoOVOM7FhBPcnM+vupB4CIlOHDLHBjWTFi1HClk8hiOwwO0kDgE5jI22a
xIibOICBoP4ydE6z6jolBJ72uqkFAo+jBLbg30fhKDb94rvNJB0DJ9RnTKPk24wr
5WyOyS7IEypdsp2qVSRu9C0qJrQK93N6RCqu4pURjyNrM52F0/wIjAqCgqx2n1+q
JzZvE4tcDdhfMYvylzH2Fegm6ADBtSaUSgIkIgfCGNxwFlDJr1w9aJwCIFwXlPNZ
HoacVC1xoRThkE+nctF96mOUqwta7x4c2MHn9oL6DNERieE2v+WowjyNAl/PMYIC
0jCCAs4CAQEwgc8wgboxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJ
bmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2FsLXRlcm1zMTkw
NwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg
dXNlIG9ubHkxLjAsBgNVBAMTJUVudHJ1c3QgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
dHkgLSBMMUsCEB5xeCD9OQddAAAAAFDcNXMwCQYFKw4DAhoFAKCB2DAYBgkqhkiG
9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0xNzA1MDIwNzQ1NDJa
MCMGCSqGSIb3DQEJBDEWBBRNsmMYSxgjQ0t0wpH7Tcmeo4A0kjB5BgkqhkiG9w0B
CQ8xbDBqMAsGCWCGSAFlAwQBKjALBglghkgBZQMEARYwCwYJYIZIAWUDBAECMAoG
CCqGSIb3DQMHMA4GCCqGSIb3DQMCAgIAgDANBggqhkiG9w0DAgIBQDAHBgUrDgMC
BzANBggqhkiG9w0DAgIBKDANBgkqhkiG9w0BAQEFAASCAQBg5QsXfa4s5DTWp2AU
Kprt+29YC+ahlmf6uh7DxS0Jr7RBdo6NLNLZV/X99Y7NHlfZsURfCwBDDg1QJK+J
KC3lbopHmPfVmbDqLWKfOcKMoy3yFw6sGqAKqaqIAFcxCGeLFg/b1dSwawdrygj7
LjyT6DVbjfs/as7YRMWvuz3Y+zQoGzBWS5aU5yALnM1M3s2y01A5ZxIbe7TqzpAv
QKpyMt9d/P22ryAQRABxi5VhG+BRcCLuMFBlTaTv0ZGbdEz/+G7c2Cp9RuULT5K8
V6Nr5D2Y9ek9YCMrC8F4iBL9nviLp+L76qTx2xYDyqOBx0sfxZD83zAvRqGOWzUU
25bW

------61FD602D4D31C5FCAE3D9C6C0E9789D2--
'''
        f_signed_msg = SMIMEHelper.format_with_cr_lf(signed_msg)
        crt_path = self.__get_cert_path('edi04_with_ca.crt')
        ca_crt_path = self.__get_cert_path('edi04_ca_cert_chain.crt')
        is_verify_cert = False

        rst = SMIMEHelper.verify_signed_text(f_signed_msg, crt_path, ca_crt_path, is_verify_cert)

        assert_equal(self.clearText, rst.strip())
Exemplo n.º 29
0
    def test_verify_signed_data_without_ca(self):
        signed_msg = '''MIME-Version: 1.0
Content-Disposition: attachment; filename="smime.p7m"
Content-Type: application/x-pkcs7-mime; smime-type=signed-data; name="smime.p7m"
Content-Transfer-Encoding: base64

MIIKqwYJKoZIhvcNAQcCoIIKnDCCCpgCAQExDzANBglghkgBZQMEAgEFADAnBgkq
hkiG9w0BBwGgGgQYVGhpcyBpcyB0ZXN0IG1lc3NhZ2UuIA0KoIIHsjCCA9UwggK9
oAMCAQICCQC2XhVbIaoZvjANBgkqhkiG9w0BAQsFADCBgDELMAkGA1UEBhMCQ04x
CzAJBgNVBAgMAlNDMQswCQYDVQQHDAJDRDEPMA0GA1UECgwGTmV3ZWdnMQwwCgYD
VQQLDANFREkxGDAWBgNVBAMMD0FTMiBDZXJ0aWZpY2F0ZTEeMBwGCSqGSIb3DQEJ
ARYPdHIyOUBuZXdlZ2cuY29tMB4XDTE3MDMyODA5Mzc1NloXDTE4MDMyODA5Mzc1
NlowgYAxCzAJBgNVBAYTAkNOMQswCQYDVQQIDAJTQzELMAkGA1UEBwwCQ0QxDzAN
BgNVBAoMBk5ld2VnZzEMMAoGA1UECwwDRURJMRgwFgYDVQQDDA9BUzIgQ2VydGlm
aWNhdGUxHjAcBgkqhkiG9w0BCQEWD3RyMjlAbmV3ZWdnLmNvbTCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBANmjQYcuDWY3E/2vhyazv3PqI6VoalRg1ESH
5BouIRW7TB9yCB4O7gWuWNfSR+JnECUZDzDaTZxoY5Hb90MAfBdTzMZzH61nMJdZ
vf3P86QyuV0MTw+N0E/u2yuOwZAbNM6xAjd78hJNoQsMj+UCv5cnRhPtLE0H5j+X
4VRlPEVPwGZaKAB7EAZJZQj6vGkMA0ib3OhwH/osjWtMGZXxqaA6HeeHNBAGIU++
gIo9V60isr1XgjuRsdAjtedxZO0ptvgprAlZ+xsctnFiEpNykevvbyHnLrYp7nEP
ijCZz72AlqFQOUxNa1RrETNj4pROXj77zfynvKBTF0hD7hIVmrUCAwEAAaNQME4w
HQYDVR0OBBYEFLDWAwHDmOVAN++FDMygl9kIyUNIMB8GA1UdIwQYMBaAFLDWAwHD
mOVAN++FDMygl9kIyUNIMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
ALo3U+fAhvV8nZMX5n6BeCDfLuD8WiD1PZG/rqoZFp9yOPP2cuPSN6Jh7TO+85ho
/7eY17tZwTgPAX7+dq+Np0HbRTRcLiqDLG3dy9sQMZNqPVuEamIzopOfRt1Q3wh2
xCqHx8yeC368ueIrPQRdvZfDCVq5wBT8CR+zn73WC728ZlmKoeG6JChpttb/93Xa
CPYSRkVvcB2UtBzAHzUdReCLP+7l26rSWvSv2Pm8fU1vlch6ikC+Bazw61zukxh+
bqx1K4Y7gXtT9B0aYWxu1tcTeMMIEc69D6jX2qnC3ay1S/5s0wzlPK4618IAET+g
FYEsHAdihG2FElL1tRNxafwwggPVMIICvaADAgECAgkAtl4VWyGqGb4wDQYJKoZI
hvcNAQELBQAwgYAxCzAJBgNVBAYTAkNOMQswCQYDVQQIDAJTQzELMAkGA1UEBwwC
Q0QxDzANBgNVBAoMBk5ld2VnZzEMMAoGA1UECwwDRURJMRgwFgYDVQQDDA9BUzIg
Q2VydGlmaWNhdGUxHjAcBgkqhkiG9w0BCQEWD3RyMjlAbmV3ZWdnLmNvbTAeFw0x
NzAzMjgwOTM3NTZaFw0xODAzMjgwOTM3NTZaMIGAMQswCQYDVQQGEwJDTjELMAkG
A1UECAwCU0MxCzAJBgNVBAcMAkNEMQ8wDQYDVQQKDAZOZXdlZ2cxDDAKBgNVBAsM
A0VESTEYMBYGA1UEAwwPQVMyIENlcnRpZmljYXRlMR4wHAYJKoZIhvcNAQkBFg90
cjI5QG5ld2VnZy5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ
o0GHLg1mNxP9r4cms79z6iOlaGpUYNREh+QaLiEVu0wfcggeDu4FrljX0kfiZxAl
GQ8w2k2caGOR2/dDAHwXU8zGcx+tZzCXWb39z/OkMrldDE8PjdBP7tsrjsGQGzTO
sQI3e/ISTaELDI/lAr+XJ0YT7SxNB+Y/l+FUZTxFT8BmWigAexAGSWUI+rxpDANI
m9zocB/6LI1rTBmV8amgOh3nhzQQBiFPvoCKPVetIrK9V4I7kbHQI7XncWTtKbb4
KawJWfsbHLZxYhKTcpHr728h5y62Ke5xD4owmc+9gJahUDlMTWtUaxEzY+KUTl4+
+838p7ygUxdIQ+4SFZq1AgMBAAGjUDBOMB0GA1UdDgQWBBSw1gMBw5jlQDfvhQzM
oJfZCMlDSDAfBgNVHSMEGDAWgBSw1gMBw5jlQDfvhQzMoJfZCMlDSDAMBgNVHRME
BTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQC6N1PnwIb1fJ2TF+Z+gXgg3y7g/Fog
9T2Rv66qGRafcjjz9nLj0jeiYe0zvvOYaP+3mNe7WcE4DwF+/navjadB20U0XC4q
gyxt3cvbEDGTaj1bhGpiM6KTn0bdUN8IdsQqh8fMngt+vLniKz0EXb2XwwlaucAU
/Akfs5+91gu9vGZZiqHhuiQoabbW//d12gj2EkZFb3AdlLQcwB81HUXgiz/u5duq
0lr0r9j5vH1Nb5XIeopAvgWs8Otc7pMYfm6sdSuGO4F7U/QdGmFsbtbXE3jDCBHO
vQ+o19qpwt2stUv+bNMM5TyuOtfCABE/oBWBLBwHYoRthRJS9bUTcWn8MYICoTCC
Ap0CAQEwgY4wgYAxCzAJBgNVBAYTAkNOMQswCQYDVQQIDAJTQzELMAkGA1UEBwwC
Q0QxDzANBgNVBAoMBk5ld2VnZzEMMAoGA1UECwwDRURJMRgwFgYDVQQDDA9BUzIg
Q2VydGlmaWNhdGUxHjAcBgkqhkiG9w0BCQEWD3RyMjlAbmV3ZWdnLmNvbQIJALZe
FVshqhm+MA0GCWCGSAFlAwQCAQUAoIHkMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0B
BwEwHAYJKoZIhvcNAQkFMQ8XDTE3MDQyNzA4NDgwM1owLwYJKoZIhvcNAQkEMSIE
IH7HFu9Vg2a65GnbbfbJXxZA3v/uZ1JEfknhNXYAeFgAMHkGCSqGSIb3DQEJDzFs
MGowCwYJYIZIAWUDBAEqMAsGCWCGSAFlAwQBFjALBglghkgBZQMEAQIwCgYIKoZI
hvcNAwcwDgYIKoZIhvcNAwICAgCAMA0GCCqGSIb3DQMCAgFAMAcGBSsOAwIHMA0G
CCqGSIb3DQMCAgEoMA0GCSqGSIb3DQEBAQUABIIBAKw+XraBkJ71sdUjyitSpeLE
lnorlkIeXqJo3KYaTqCaeR49GddkWFje1CpHnlHPCvI2JyC98W9PdKnP70cjIGDc
2V2rM3VD/cFvXjMbYIRB7gsTD1QmZPivXNQTSoTPYcuzLgxMYQIzROTWN9Ex5tLQ
+IO4zRfVwjK6BsQPunLtPLBjZ0ibzPglGvU6nctj9QKaGSo6MtfX7zd3qF2Ufk2w
Fr34/9qPnWHzvNAdTNjP9BNpFEBn4VTSv0LYGnjBKmV6pSk7gkL5Rna6H5fEQ2aD
1kAYa9en++gdVyhBZ/q76baX/rivop7N2fgkkxasGlru4aJK/8P1JdbGDFDGtDA=

'''
        f_signed_msg = SMIMEHelper.format_with_cr_lf(signed_msg)
        crt_path = self.__get_cert_path('P1_public.cer')
        ca_crt_path = self.__get_cert_path('P1_public.cer')
        is_verify_cert = True

        rst = SMIMEHelper.verify_signed_text(f_signed_msg, crt_path, ca_crt_path, is_verify_cert)

        assert_equal(self.clearText, rst.strip())
Exemplo n.º 30
0
    def test_verify_signed_data_no_verify_cert_without_ca(self):
        signed_msg = '''MIME-Version: 1.0
Content-Disposition: attachment; filename="smime.p7m"
Content-Type: application/x-pkcs7-mime; smime-type=signed-data; name="smime.p7m"
Content-Transfer-Encoding: base64

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
uxtwCuo/x84=

'''
        f_signed_msg = SMIMEHelper.format_with_cr_lf(signed_msg)
        crt_path = self.__get_cert_path('P1_public.cer')
        ca_crt_path = self.__get_cert_path('P1_public.cer')
        is_verify_cert = False

        rst = SMIMEHelper.verify_signed_text(f_signed_msg, crt_path, ca_crt_path, is_verify_cert)

        assert_equal(self.clearText, rst.strip())