def acme_authorization(self, domain): """Handle ACME "authorization" phase. :param str domain: domain that is requesting authorization :returns: ACME "authorization" message. :rtype: :class:`letsencrypt.acme.messages.Authorization` """ try: auth = self.network.send_and_receive_expected( messages.AuthorizationRequest.create( session_id=self.msgs[domain].session_id, nonce=self.msgs[domain].nonce, responses=self.responses[domain], name=domain, key=jose.HashableRSAKey(Crypto.PublicKey.RSA.importKey( self.authkey[domain].pem))), messages.Authorization) logging.info("Received Authorization for %s", domain) return auth except errors.LetsEncryptClientError as err: logging.fatal(str(err)) logging.fatal( "Failed Authorization procedure - cleaning up challenges") sys.exit(1) finally: self._cleanup_challenges(domain)
def acme_certificate(self, csr_der): """Handle ACME "certificate" phase. :param str csr_der: CSR in DER format. :returns: ACME "certificate" message. :rtype: :class:`letsencrypt.acme.message.Certificate` """ logging.info("Preparing and sending CSR...") return self.network.send_and_receive_expected( messages.CertificateRequest.create( csr=jose.ComparableX509( M2Crypto.X509.load_request_der_string(csr_der)), key=jose.HashableRSAKey( Crypto.PublicKey.RSA.importKey(self.authkey.pem))), messages.Certificate)
"""Tests for letsencrypt.acme.sig.""" import pkg_resources import unittest import Crypto.PublicKey.RSA from letsencrypt.acme import jose RSA256_KEY = jose.HashableRSAKey( Crypto.PublicKey.RSA.importKey( pkg_resources.resource_string('letsencrypt.client.tests', 'testdata/rsa256_key.pem'))) RSA512_KEY = jose.HashableRSAKey( Crypto.PublicKey.RSA.importKey( pkg_resources.resource_string('letsencrypt.client.tests', 'testdata/rsa512_key.pem'))) class SignatureTest(unittest.TestCase): # pylint: disable=too-many-instance-attributes """Tests for letsencrypt.acme.sig.Signature.""" def setUp(self): self.msg = 'message' self.sig = ('IC\xd8*\xe7\x14\x9e\x19S\xb7\xcf\xec3\x12\xe2\x8a\x03' '\x98u\xff\xf0\x94\xe2\xd7<\x8f\xa8\xed\xa4KN\xc3\xaa' '\xb9X\xc3w\xaa\xc0_\xd0\x05$y>l#\x10<\x96\xd2\xcdr\xa3' '\x1b\xa1\xf5!f\xef\xc64\xb6\x13') self.nonce = '\xec\xd6\xf2oYH\xeb\x13\xd5#q\xe0\xdd\xa2\x92\xa9' self.alg = jose.RS256 self.jwk = jose.JWKRSA(key=RSA256_KEY.publickey())
"""Tests for letsencrypt.acme.messages.""" import os import pkg_resources import unittest import Crypto.PublicKey.RSA import M2Crypto from letsencrypt.acme import challenges from letsencrypt.acme import errors from letsencrypt.acme import jose from letsencrypt.acme import other KEY = jose.HashableRSAKey(Crypto.PublicKey.RSA.importKey( pkg_resources.resource_string( 'letsencrypt.acme.jose', os.path.join('testdata', 'rsa512_key.pem')))) CERT = jose.ComparableX509(M2Crypto.X509.load_cert( pkg_resources.resource_filename( 'letsencrypt.client.tests', os.path.join('testdata', 'cert.pem')))) CSR = jose.ComparableX509(M2Crypto.X509.load_request( pkg_resources.resource_filename( 'letsencrypt.client.tests', os.path.join('testdata', 'csr.pem')))) CSR2 = jose.ComparableX509(M2Crypto.X509.load_request( pkg_resources.resource_filename( 'letsencrypt.acme.jose', os.path.join('testdata', 'csr2.pem')))) class MessageTest(unittest.TestCase): """Tests for letsencrypt.acme.messages.Message."""
"""Class helps construct valid ACME messages for testing.""" import os import pkg_resources import Crypto.PublicKey.RSA from letsencrypt.acme import challenges from letsencrypt.acme import jose KEY = jose.HashableRSAKey( Crypto.PublicKey.RSA.importKey( pkg_resources.resource_string( "letsencrypt.client.tests", os.path.join("testdata", "rsa256_key.pem")))) # Challenges SIMPLE_HTTPS = challenges.SimpleHTTPS( token="evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ+PCt92wr+oA") DVSNI = challenges.DVSNI( r="O*\xb4-\xad\xec\x95>\xed\xa9\r0\x94\xe8\x97\x9c&6\xbf'\xb3" "\xed\x9a9nX\x0f'\\m\xe7\x12", nonce="a82d5ff8ef740d12881f6d3c2277ab2e") DNS = challenges.DNS(token="17817c66b60ce2e4012dfad92657527a") RECOVERY_CONTACT = challenges.RecoveryContact( activation_url="https://example.ca/sendrecovery/a5bd99383fb0", success_url="https://example.ca/confirmrecovery/bb1b9928932", contact="c********[email protected]") RECOVERY_TOKEN = challenges.RecoveryToken() POP = challenges.ProofOfPossession( alg="RS256", nonce="xD\xf9\xb9\xdbU\xed\xaa\x17\xf1y|\x81\x88\x99 ",