HEX
Server: LiteSpeed
System: Linux php-prod-1.spaceapp.ru 5.15.0-157-generic #167-Ubuntu SMP Wed Sep 17 21:35:53 UTC 2025 x86_64
User: xnsbb3110 (1041)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: //usr/local/CyberCP/plogical/__pycache__/customACME.cpython-310.pyc
o

��h8��@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlm	Z	ddl
mZddlm
Z
ddl
mZddlmZddlmZddlZddlmZdd	lmZddlZGd
d�d�ZdS)�N)�x509)�
serialization)�rsa)�hashes)�default_backend)�padding)�CyberCPLogFileWriter)�ProcessUtilitiesc@s�eZdZd0dd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd1d'd(�Zd)d*�Zd1d+d,�Zd2d-d.�Zd/S)3�
CustomACMEF�letsencryptc
Cstj�d|�d|�d|�d|���||_||_||_||_|dkr8|r.d|_tj�d�nd|_tj�d	�n|rDd
|_tj�d�n	d|_tj�d
�d|_d|_	d|_
d|_d|_g|_
d|_d|_d|��|_d|_d|�d�|_tj�d|j�d|j���tjddd�dS)zInitialize CustomACMEz$Initializing CustomACME for domain: z	, email: z, staging: z, provider: �zerosslz(https://acme-staging.zerossl.com/v2/DV90z$Using ZeroSSL staging ACME directoryz https://acme.zerossl.com/v2/DV90z'Using ZeroSSL production ACME directory�6https://acme-staging-v02.api.letsencrypt.org/directoryz*Using Let's Encrypt staging ACME directory�.https://acme-v02.api.letsencrypt.org/directoryz-Using Let's Encrypt production ACME directoryNz/etc/letsencrypt/live/z7/usr/local/lsws/Example/html/.well-known/acme-challengez/etc/letsencrypt/accounts/z.keyzCertificate path: z, Challenge path: z/etc/letsencrypt/accountsT)�exist_ok)�loggingr�writeToFile�domain�admin_email�staging�provider�acme_directory�account_key�account_url�	directory�nonce�	order_url�authorizations�finalize_url�certificate_url�	cert_path�challenge_path�account_key_path�os�makedirs)�selfrrrr�r%�)/usr/local/CyberCP/plogical/customACME.py�__init__sB��zCustomACME.__init__c
Cstztj�d�tjddt�d�}||_tj�d�WdSty9}ztj�dt|����WYd}~d	Sd}~ww)
zGenerate RSA account keyzGenerating RSA account key...����public_exponent�key_size�backendz&Successfully generated RSA account keyTzError generating account key: NF)	rrrr�generate_private_keyrr�	Exception�str)r$�key�er%r%r&�_generate_account_keyBs���z CustomACME._generate_account_keyc
Cs�z%tj�d|j���t�|j�}|��|_tj�dt�|j����WdSt	yC}ztj�dt
|����WYd}~dSd}~ww)zGet ACME directoryzFetching ACME directory from z%Successfully fetched ACME directory: TzError getting directory: NF)rrrr�requests�get�jsonr�dumpsr/r0)r$�responser2r%r%r&�_get_directoryRs
���zCustomACME._get_directoryc
Cs�zEtj�d�t�|jd�}d}dD]}||jvr|}nq|s3tj�dt|j������t	d��|j||_
tj�d|j
���WdStyc}ztj�d	t|����WYd}~d
Sd}~ww)zGet new nonce from ACME serverzGetting new nonce...�newNonceN)zReplay-Noncezreplay-noncezREPLAY-NONCEzAvailable headers: z)Replay-Nonce header not found in responsezSuccessfully got nonce: TzError getting nonce: F)
rrrr4�headr�headers�list�keys�KeyErrorrr/r0)r$r8�nonce_header�header_namer2r%r%r&�
_get_nonce_s(
���zCustomACME._get_noncec
Cs��z9tj�d|���|durtj�dt�|����|��s(tj�d�WdStj�d�|j��}|j}tj�d�|j	�
|j	��ddd	�}|j�
|j��ddd	�}tj�d
�dt
�|��d��d
�t
�|��d��d
�dd�}tj�dt�|����d||jd�}|jr�||jdkr�|j|d<tj�d|j���n
||d<tj�d�tj�d�t
�t�|��d���d��d
�}	|dur�d}
tj�d�ntj�d�t
�t�|��d���d��d
�}
tj�d�|	�d|
���d�}tj�d�|j�|t��t���}tj�d�t
�|��d��d
�}
tj�d�|	|
|
d �}tj|d!d"�}tj�d#|���|WSt�yY}ztj�d$t|����WYd}~dSd}~ww)%zCreate JWS (JSON Web Signature)zCreating JWS for URL: Nz	Payload: zFailed to get fresh noncezGetting private key numbers...z"Converting RSA numbers to bytes...���bigzCreating JWK...�RSA�utf-8�=�RS256)�kty�nr2�algz
Created JWK: )rL�urlr�
newAccount�kidzUsing Key ID: �jwkzUsing JWK for new accountzEncoding protected header...�z+Using empty payload for POST-as-GET requestzEncoding payload...zCreating signature input...�.zSigning input...zEncoding signature...zCreating final JWS...��	protected�payload�	signature��,�:)�
separatorszFinal JWS: zError creating JWS: )rrrr6r7rBr�private_numbers�public_numbersrK�to_bytes�
bit_lengthr2�base64�urlsafe_b64encode�decode�rstriprrr�encode�signr�PKCS1v15r�SHA256r/r0)r$rUrMr[r\�n_bytes�e_bytes�jwk_keyrT�
protected_b64�payload_b64�signature_inputrV�
signature_b64�jws�jws_strr2r%r%r&�_create_jwsxs�
��
��������zCustomACME._create_jwsc
Cs�z=tj�|j�r;tj�d�t|jd��}|��}Wd�n1s#wYt	j
|dt�d�|_tj�d�WdSWdSt
y[}ztj�dt|����WYd}~dSd}~ww)	z&Load existing account key if availablezLoading existing account key...�rbN)�passwordr-z(Successfully loaded existing account keyTFzError loading account key: )r"�path�existsr!rrr�open�readr�load_pem_private_keyrrr/r0)r$�f�key_datar2r%r%r&�_load_account_key�s&
����zCustomACME._load_account_keyc
Cs�z9tj�d�|jjtjjtjj	t�
�d�}t|jd��
}|�
|�Wd�n1s,wYtj�d�WdStyW}ztj�dt|����WYd}~dSd}~ww)	zSave account key for future usezSaving account key...��encoding�format�encryption_algorithm�wbNzSuccessfully saved account keyTzError saving account key: F)rrrr�
private_bytesr�Encoding�PEM�
PrivateFormat�PKCS8�NoEncryptionrur!�writer/r0)r$ryrxr2r%r%r&�_save_account_key�s"����zCustomACME._save_account_keyc
Cs6z�tj�d�dd|j��gd�}|jdkr`d|jvr`d|jdvr`|jddr`tj�d�|��\}}|r9|sXtj�d	�d
|_d|_|��sLWdS|�	�sSWdS|�
�WS|�||�|d
<|�||jd�}|sttj�d�WdStj�d�ddi}t
j|jd||d�}tj�d|j���tj�d|j���|jdkr�|jd|_tj�d|j���|��WdS|jdkr�tj�d�d|_d|_|��s�WdS|�	�s�WdS|�
�WS|jdkr�d|jvr�tj�d�|�	�s�WdS|�
�WSWdSt�y}ztj�dt|����WYd }~dSd }~ww)!zCreate new ACME accountzCreating new ACME account...Tzmailto:)�termsOfServiceAgreed�contactr�meta�externalAccountRequiredzEZeroSSL requires External Account Binding, getting EAB credentials...zDFailed to get ZeroSSL EAB credentials, falling back to Let's EncryptrrF�externalAccountBindingrNz)Failed to create JWS for account creationz#Sending account creation request...�Content-Type�application/jose+json��datar<z"Account creation response status: zAccount creation response: ���Locationz+Successfully created account. Account URL: i�zARate limit hit for account creation. Using staging environment...r
i��badNoncez,Bad nonce, getting new nonce and retrying...zError creating account: N)rrrrrr�_get_zerossl_eab_credentialsrr9rB�_create_account�_create_eabrpr4�post�status_code�textr<rr�rr/r0)r$rU�eab_kid�eab_hmac_keyrnr<r8r2r%r%r&r��s�����
�

�
�

��zCustomACME._create_accountc
Cs�zJtj�d�d}ddi}d|ji}tj|||d�}tj�d|j���tj�d|j���|jd	krH|��}d
|vrHd|vrH|d
|dfWSWdSt	yh}ztj�d
t
|����WYd}~dSd}~ww)z5Get External Account Binding credentials from ZeroSSLz"Getting ZeroSSL EAB credentials...z2https://api.zerossl.com/acme/eab-credentials-emailr�z!application/x-www-form-urlencoded�email)r<r�zZeroSSL EAB response status: zZeroSSL EAB response: ��r�r�)NNz'Error getting ZeroSSL EAB credentials: N)rrrrr4r�r�r�r6r/r0)r$�eab_urlr<r�r8�eab_datar2r%r%r&r�Hs(��
��z'CustomACME._get_zerossl_eab_credentialsc
Cs�z�tj�d�|j��}|j}|j�|j��ddd�}|j	�|j	��ddd�}dt
�|��d��
d�t
�|��d��
d�d�}d	||jd
d�}t
�t�|��d���d��
d�}	t
�t�|��d���d��
d�}
|	�d|
���d�}t
�|d
�}t�||tj���}
t
�|
��d��
d�}|	|
|d�}tj�d�|WSty�}ztj�dt|����WYd}~dSd}~ww)z+Create External Account Binding for ZeroSSLz$Creating External Account Binding...rCrDrErFrGrH�rJrKr2�HS256rN)rLrOrMrRz==rSz-Successfully created External Account Bindingz)Error creating External Account Binding: N)rrrrr[r\rKr]r^r2r_r`rarbrr6r7rc�urlsafe_b64decode�hmac�new�hashlib�sha256�digestr/r0)r$r�r�r[r\rgrhrPrTrjrkrl�hmac_keyrVrm�eabr2r%r%r&r�dsN
���������zCustomACME._create_eabc
CsZz�tj�d|���dd�|D�}d|i}|�||jd�}|s)tj�d�WdStj�d�d	d
i}tj|jd||d�}tj�d|j���tj�d
|j���|jdkr�|j	d|_
|��d|_|��d|_
tj�d|j
���tj�d|j���tj�d|j
���WdSWdSty�}ztj�dt|����WYd}~dSd}~ww)zCreate new order for domainsz Creating new order for domains: cSsg|]}d|d��qS)�dns)�type�valuer%��.0rr%r%r&�
<listcomp>�sz,CustomACME._create_order.<locals>.<listcomp>�identifiers�newOrderz'Failed to create JWS for order creationFz!Sending order creation request...r�r�r�z Order creation response status: zOrder creation response: r�r�r�finalizez'Successfully created order. Order URL: zAuthorizations: zFinalize URL: TzError creating order: N)rrrrprr4r�r�r�r<rr6rrr/r0)r$�domainsr�rUrnr<r8r2r%r%r&�
_create_order�s:��
��zCustomACME._create_orderc
Cszitj�dt�|����|�|�}|stj�d�WdStj�|j	�s4tj�d|j	���t�
|j	�tj�|j	|d�}tj�d|���t|d��
}|�
|�Wd�n1s\wYtj�d	�Wd
Sty�}ztj�dt|����WYd}~dSd}~ww)zHandle HTTP-01 challengezHandling HTTP challenge: zFailed to get key authorizationFzCreating challenge directory: �tokenzWriting challenge file: �wNz#Successfully handled HTTP challengeTzError handling HTTP challenge: )rrrr6r7�_get_key_authorizationr"rsrtr r#�joinrur�r/r0)r$�	challenge�key_auth�challenge_filerxr2r%r%r&�_handle_http_challenge�s*
���z!CustomACME._handle_http_challengec
Cs\ztj�dt�|����WdSty-}ztj�dt|����WYd}~dSd}~ww)z$Handle DNS-01 challenge (Cloudflare)zHandling DNS challenge: zError handling DNS challenge: NF)rrrr6r7r/r0)r$r�r2r%r%r&�_handle_dns_challenge�s��z CustomACME._handle_dns_challengec
Csjz�tj�d�|j��}|j}|j�|j��ddd�}|j	�|j	��ddd�}dt
�|��d��
d�t
�|��d��
d�d�}t
�|j	�d	d���d��
d�dt
�|j�d
d���d��
d�d�}tj|dd
d�}t�|�d����}	t
�|	��d��
d�}	|d�d|	��}
tj�d|
���|
WSty�}ztj�dt|����WYd}~dSd}~ww)z#Get key authorization for challengezGetting key authorization...rCrDrErFrGrHr���)r2rJrKTrW)�	sort_keysrZr�rRzKey authorization: z!Error getting key authorization: N)rrrrr[r\rKr]r^r2r_r`rarbr6r7r�r�rcr�r/r0)r$r�r[r\rgrhrirP�
sorted_jwk�
thumbprintr�r2r%r%r&r��s2
�
���z!CustomACME._get_key_authorizationc
Cs�zStj�d|���i}|�||�}|stj�d�WdStj�d�ddi}tj|||d�}tj�d|j���tj�d	|j���|jd
krQtj�d�WdSWdStyq}ztj�d
t	|����WYd}~dSd}~ww)a�Verify challenge completion with the ACME server

        This function sends a POST request to the ACME server to verify that the challenge
        has been completed successfully. The challenge URL is provided by the ACME server
        when the challenge is created.

        Example challenge_url:
        "https://acme-v02.api.letsencrypt.org/acme/challenge/example.com/123456"

        The verification process:
        1. Creates an empty payload (POST-as-GET request)
        2. Creates a JWS (JSON Web Signature) with the payload
        3. Sends the request to the ACME server
        4. Checks the response status

        Returns:
            bool: True if challenge is verified successfully, False otherwise
        zVerifying challenge at URL: z/Failed to create JWS for challenge verificationFz)Sending challenge verification request...r�r�r�z(Challenge verification response status: z!Challenge verification response: r�zSuccessfully verified challengeTzError verifying challenge: N)
rrrrpr4r�r�r�r/r0)r$�
challenge_urlrUrnr<r8r2r%r%r&�_verify_challenges,	�
��zCustomACME._verify_challengec
Cs6z�tj�d�dt�|��d��d�i}|�||j�}|s&tj�d�WdStj�d�dd	i}t	j
|j||d
�}tj�d|j���tj�d|j���|jd
kr�d}d}t
|�D]�}|��sjtj�d�WdS|�d|j�}|s}tj�d�WdSt	j
|j||d
�}tj�d|j���|jd
kr�|���d�}	|	dkr�|���d�|_tj�d|j���WdS|	dkr�tj�d�WdS|	dkr�tj�d|d�d|���t�|�qZtj�d|d�d|���t�|�qZtj�d �WdSWdSt�y}
ztj�d!t|
����WYd}
~
dSd}
~
ww)"z"Finalize order and get certificatezFinalizing order...�csrrGrHz+Failed to create JWS for order finalizationFz%Sending order finalization request...r�r�r�z$Order finalization response status: zOrder finalization response: r����*Failed to get nonce for order status checkN�+Failed to create JWS for order status check�Order status check response: �status�valid�certificatez/Successfully finalized order. Certificate URL: T�invalid�Order validation failed�
processing� Order still processing, attempt ��/�#Order status check failed, attempt �Order processing timed outzError finalizing order: )rrrr_r`rarbrprr4r�r�r��rangerBrr6r5r�time�sleepr/r0)r$r�rUrnr<r8�max_attempts�delay�attempt�order_statusr2r%r%r&�_finalize_ordercsp��


��
���zCustomACME._finalize_orderc
Cs0zytj�d�tj�d|j���|��stj�d�WdS|�d|j�}|s0tj�d�WdSddi}tj|j||d�}tj�d	|j���tj�d
|j	���|jdkrmtj�d�t
|jt�ri|j�
d
�WS|jWStj�d|j���WdSty�}ztj�dt|����WYd}~dSd}~ww)z%Download certificate from ACME serverzDownloading certificate...zCertificate URL: z,Failed to get nonce for certificate downloadNz-Failed to create JWS for certificate downloadr�r�r�z&Certificate download response status: z'Certificate download response headers: r�z#Successfully downloaded certificaterGzCertificate download failed: zError downloading certificate: )rrrrrBrpr4r�r�r<�
isinstancer�r0rc�contentr/)r$rnr<r8r2r%r%r&�_download_certificate�s2�
"��z CustomACME._download_certificater�r�c

CsRz�tj�d|���t|�D]s}|��stj�d�WdS|�d|�}|s0tj�d�WdSddi}tj|||d�}tj�d	|j���|j	d
krn|�
��d�}|dkr`tj�d
�WdS|dkrntj�d�WdStj�d|d�d|���t�
|�qtj�d�WdSty�}	ztj�dt|	����WYd}	~	dSd}	~	ww)z5Wait for challenge to be validated by the ACME serverz)Waiting for challenge validation at URL: z.Failed to get nonce for challenge status checkFNz/Failed to create JWS for challenge status checkr�r�r�z!Challenge status check response: r�r�r�z Challenge validated successfullyTr�zChallenge validation failedz!Challenge still pending, attempt r�r�zChallenge validation timed outz(Error waiting for challenge validation: )rrrr�rBrpr4r�r�r�r6r5r�r�r/r0)
r$r�r�r�r�rnr<r8�challenge_statusr2r%r%r&�_wait_for_challenge_validation�sB�
���z)CustomACME._wait_for_challenge_validationc
s2zztj�d����gd�}d
�fdd�	}d}|D]}||d�r$d}nqd}|D]}||d�r4d}nq)z	t���d}Wn
tjyHYnwzt��d	tj�d}Wn
tjy_Ynw|rktj�d
����|rvtj�d����|py|WSty�}ztj�dt	|����WYd	}~dSd	}~ww)a�Check if a domain has valid DNS records

        This function performs multiple DNS checks to ensure the domain has valid DNS records.
        It includes:
        1. A record (IPv4) check
        2. AAAA record (IPv6) check
        3. DNS caching prevention
        4. Multiple DNS server checks

        Args:
            domain (str): The domain to check

        Returns:
            bool: True if valid DNS records are found, False otherwise
        z!Checking DNS records for domain: )z8.8.8.8z1.1.1.1z208.67.222.222�Ac
sjz�z�t�tjtj�}|�d�|�|df�t�}|d7}|d7}|d7}|d7}|d7}|d7}��d�D]}|�t|��|�	|�
��q6|d7}|dkrT|d7}n|d	7}|d7}|�|�|�d
�}t|�dkr�t
�|dd
�d�}|dkr�WW|��dSWW|��dSty�}ztj�d|�dt|����WYd}~W|��dSd}~ww|��w)N��5sssrR�r�si��rDrErTFzError checking DNS with server z: )�socket�AF_INET�
SOCK_DGRAM�
settimeout�connect�	bytearray�split�append�len�extendrc�send�recv�int�
from_bytes�closer/rrrr0)�server�record_type�sock�query�partr8�answer_countr2�rr%r&�check_with_dns_serversF



����
z;CustomACME._check_dns_record.<locals>.check_with_dns_serverFT�AAAANz"IPv4 DNS record found for domain: z"IPv6 DNS record found for domain: zError checking DNS records: )r�)
rrrr��
gethostbyname�gaierror�getaddrinfo�AF_INET6r/r0)r$r�dns_serversr��a_record_foundr��aaaa_record_foundr2r%r�r&�_check_dns_record�sL5
�
�
��
��zCustomACME._check_dns_recordc	
Cs�z�tj�d�t|�D]�}|��stj�d�WdS|�d|j�}|s.tj�d�WdSddi}tj|j||d�}tj�d	|j	���|j
d
kr�|���d�}|dkrg|���d
�|_
tj�d�WdS|dkrutj�d�WdS|dkr�tj�d|d�d|���t�|�qtj�d|d�d|���t�|�qtj�d�WdSty�}ztj�dt|����WYd}~dSd}~ww)zWait for order to be processedzWaiting for order processing...r�FNr�r�r�r�r�r�r�r�r�zOrder validated successfullyTr�r�r�r�r�r�r�r�z$Error waiting for order processing: )rrrr�rBrprr4r�r�r�r6r5rr�r�r/r0)	r$r�r�r�rnr<r8r�r2r%r%r&�_wait_for_order_processingisP�
�
���z%CustomACME._wait_for_order_processingc
Cst�ztj�d|�d|���|��rtj�d�ntj�d�g}|D]}|�|�r0|�|�q#tj�d|�d��q#|sFtj�d�WdStj�d	�|��sYtj�d
�WdStj�d�|��sltj�d�WdStj�d
�|��stj�d�WdStj�d�|�	�s�tj�d�|j
s�tj�d�d|_
d|_|��s�WdS|��s�WdS|�	�s�WdSnWdStj�d�|�|�s�tj�d�WdStj�d�|j
D�]}tj�d|���|��s�tj�d�WdStj�d|���|�d|�}|�s
tj�d�WdSddi}tj|||d�}tj�d|j���tj�d |j���|jd!k�r:tj�d"�WdS|��d#}	|	D]�}
tj�d$t�|
����|�r�|
d%d&k�r�|�|
��sktj�d'�WdS|�|
d(��s~tj�d)�WdS|�|
d(��s�tj�d*�WdS�qB|�s�|
d%d+k�r�|�|
��s�tj�d,�WdS|�|
d(��s�tj�d-�WdS|�|
d(��s�tj�d.�WdS�qBtj�d/|
d%�d0���qBq�tj�d1�tjd2d3t�d4�}|�d|j�}|�stj�d5�WdStj|j||d���}d6d7�|d8D�}
tj�d9|
���t���t� t�!tj"j#|
d:�g��j$t�%d;d7�|
D��dd<��&|t'�(�t��}tj�d=�|�)|�*t+j,j-���sftj�d>�WdStj�d?�|�.��sztj�d@�WdStj�dA�|�/�}|�s�tj�dB�WdStj�dC�t0j1�2|j3��s�tj�dD|j3���t0�4|j3�t0j1�5|j3dE�}t0j1�5|j3dF�}tj�dG|���t6|dH��
}|�7|�Wd�n	1�s�wYtj�dI|���t6|dH��}|�7|j8t+j,j9t+j:j;t+�<�dJ��Wd�n	1�s
wYtj�dK�WdSt=�y9}ztj�dLt>|����WYd}~dSd}~ww)Mz Main method to issue certificatez+Starting certificate issuance for domains: z, use_dns: zUsing existing account keyz2No existing account key found, will create new onezSkipping domain z due to missing DNS recordsz'No valid domains found with DNS recordsFzStep 1: Generating account keyzFailed to generate account keyzStep 2: Getting ACME directoryzFailed to get ACME directoryzStep 3: Getting noncezFailed to get noncezStep 4: Creating accountzFailed to create accountz#Switching to staging environment...Tr
zStep 5: Creating orderzFailed to create orderzStep 6: Handling challengeszProcessing authorization URL: z%Failed to get nonce for authorizationz$Fetching authorization details for: Nz.Failed to create JWS for authorization requestr�r�r�zAuthorization response status: zAuthorization response: r�zFailed to get authorization�
challengeszProcessing challenge: r�zdns-01zFailed to handle DNS challengerMzFailed to verify DNS challengezDNS challenge validation failedzhttp-01zFailed to handle HTTP challengezFailed to verify HTTP challengez HTTP challenge validation failedz	Skipping z
 challengezStep 7: Generating CSRr(r)r*z&Failed to create JWS for order detailscSsg|]}|d�qS)r�r%)r��
identifierr%r%r&r�sz0CustomACME.issue_certificate.<locals>.<listcomp>r�zOrder domains: rcSsg|]}t�|��qSr%)r�DNSNamer�r%r%r&r�%s
�)�criticalzStep 8: Finalizing orderzFailed to finalize orderz$Step 9: Waiting for order processingzFailed to process orderz Step 10: Downloading certificatezFailed to download certificatezStep 11: Saving certificatez Creating certificate directory: z
fullchain.pemzprivkey.pemzSaving certificate to: rzSaving private key to: r{z+Successfully completed certificate issuancezError issuing certificate: )?rrrrzrr�r3r9rBr�rrr�rrpr4r�r�r�r6r7r�r�r�r�rr.rrr� CertificateSigningRequestBuilder�subject_name�Name�
NameAttribute�NameOID�COMMON_NAME�
add_extension�SubjectAlternativeNamerdrrfr��public_bytesrr��DERr	r�r"rsrtrr#r�rur�r�r�r�r�r�r/r0)r$r��use_dns�
valid_domainsr�auth_urlrnr<r8r
r�r1�order_response�
order_domainsr�r��	cert_file�key_filerxr2r%r%r&�issue_certificate�s8�
�
�


�


�����
��	�
�
����zCustomACME.issue_certificateN)Fr)r�r�)F)�__name__�
__module__�__qualname__r'r3r9rBrprzr�r�r�r�r�r�r�r�r�r�r�r�rr	rr%r%r%r&r
s,
,
aK8#5FB
#(
y.r
)r6r"r�r4r_r�r�r�cryptographyr�cryptography.hazmat.primitivesr�)cryptography.hazmat.primitives.asymmetricrr�cryptography.hazmat.backendsrr�OpenSSL�plogicalr�plogical.processUtilitiesr	r�r
r%r%r%r&�<module>s&