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)
예제 #2
0
    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)
예제 #3
0
"""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())
예제 #4
0
"""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."""
예제 #5
0
"""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 ",