File: //opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/__pycache__/tls.cpython-310.pyc
o
�N�gA� �
@ s� d Z ddlZddlZddlZddlZddlZddlZddlZddlmZ ddl Z
ddlZ
ddlZ
ddl
mZ ddlmZ dZdazddlZdZeej�dd ��ZW n eyZ Y nw e�e�Zd
ZdZdd
� Zdd� Zdd� Zd]dd�Z d]dd�Z!dd� Z"dd� Z#dd� Z$d]dd�Z%d^dd �Z&d_d!d"�Z'd_d#d$�Z(d]d%d&�Z)d`d'd(�Z* dad*d+�Z+ dad,d-�Z,d.d/� Z-d0d1� Z.d2d3� Z/dbd5d6�Z0d7d8� Z1 9 : ) ; < = > ? dcd@dA�Z2dBdC� Z3 9 ) ; < = > ? D dddEdF�Z4 G 9 : ) ; < = > ? dedHdI�Z5 : ? dfdJdK�Z6dgdMdN�Z7dhdOdP�Z8 ?didQdR�Z9 ?djdSdT�Z:edUk�rOe4dVdWd;d<dXd>ddYdZ� e6dVdW� e7dVdWd[d\� dS dS )kaX
A salt module for SSL/TLS. Can create a Certificate Authority (CA)
or use Self-Signed certificates.
:depends: PyOpenSSL Python module (0.10 or later, 0.14 or later for X509
extension support)
:configuration: Add the following values in /etc/salt/minion for the CA module
to function properly:
.. code-block:: yaml
ca.cert_base_path: '/etc/pki'
CLI Example #1:
Creating a CA, a server request and its signed certificate:
.. code-block:: bash
# salt-call tls.create_ca my_little \
days=5 \
CN='My Little CA' \
C=US \
ST=Utah \
L=Salt Lake City \
O=Saltstack \
emailAddress=pleasedontemail@example.com
Created Private Key: "/etc/pki/my_little/my_little_ca_cert.key"
Created CA "my_little_ca": "/etc/pki/my_little_ca/my_little_ca_cert.crt"
# salt-call tls.create_csr my_little CN=www.example.com
Created Private Key: "/etc/pki/my_little/certs/www.example.com.key
Created CSR for "www.example.com": "/etc/pki/my_little/certs/www.example.com.csr"
# salt-call tls.create_ca_signed_cert my_little CN=www.example.com
Created Certificate for "www.example.com": /etc/pki/my_little/certs/www.example.com.crt"
CLI Example #2:
Creating a client request and its signed certificate
.. code-block:: bash
# salt-call tls.create_csr my_little CN=DBReplica_No.1 cert_type=client
Created Private Key: "/etc/pki/my_little/certs//DBReplica_No.1.key"
Created CSR for "DBReplica_No.1": "/etc/pki/my_little/certs/DBReplica_No.1.csr"
# salt-call tls.create_ca_signed_cert my_little CN=DBReplica_No.1
Created Certificate for "DBReplica_No.1": "/etc/pki/my_little/certs/DBReplica_No.1.crt"
CLI Example #3:
Creating both a server and client req + cert for the same CN
.. code-block:: bash
# salt-call tls.create_csr my_little CN=MasterDBReplica_No.2 \
cert_type=client
Created Private Key: "/etc/pki/my_little/certs/MasterDBReplica_No.2.key"
Created CSR for "DBReplica_No.1": "/etc/pki/my_little/certs/MasterDBReplica_No.2.csr"
# salt-call tls.create_ca_signed_cert my_little CN=MasterDBReplica_No.2
Created Certificate for "DBReplica_No.1": "/etc/pki/my_little/certs/DBReplica_No.1.crt"
# salt-call tls.create_csr my_little CN=MasterDBReplica_No.2 \
cert_type=server
Certificate "MasterDBReplica_No.2" already exists
(doh!)
# salt-call tls.create_csr my_little CN=MasterDBReplica_No.2 \
cert_type=server type_ext=True
Created Private Key: "/etc/pki/my_little/certs/DBReplica_No.1_client.key"
Created CSR for "DBReplica_No.1": "/etc/pki/my_little/certs/DBReplica_No.1_client.csr"
# salt-call tls.create_ca_signed_cert my_little CN=MasterDBReplica_No.2
Certificate "MasterDBReplica_No.2" already exists
(DOH!)
# salt-call tls.create_ca_signed_cert my_little CN=MasterDBReplica_No.2 \
cert_type=server type_ext=True
Created Certificate for "MasterDBReplica_No.2": "/etc/pki/my_little/certs/MasterDBReplica_No.2_server.crt"
CLI Example #4:
Create a server req + cert with non-CN filename for the cert
.. code-block:: bash
# salt-call tls.create_csr my_little CN=www.anothersometh.ing \
cert_type=server type_ext=True
Created Private Key: "/etc/pki/my_little/certs/www.anothersometh.ing_server.key"
Created CSR for "DBReplica_No.1": "/etc/pki/my_little/certs/www.anothersometh.ing_server.csr"
# salt-call tls_create_ca_signed_cert my_little CN=www.anothersometh.ing \
cert_type=server cert_filename="something_completely_different"
Created Certificate for "www.anothersometh.ing": /etc/pki/my_little/certs/something_completely_different.crt
� N)�datetime)�CommandExecutionError)�VersionFT�__version__z0.0z
%y%m%d%H%M%SZ�
%Y%m%d%H%M%SZc C sP t r$ttd�kr$ttd�k rdat�d� dS ttd�kr"t�d� dS dadS ) z@
Only load this module if the ca config options are set
z0.10z0.14FzfYou should upgrade pyOpenSSL to at least 0.14.1 to enable the use of X509 extensions in the tls modulez0.15zkYou should upgrade pyOpenSSL to at least 0.15.1 to enable the full use of X509 extensions in the tls moduleT)FzQPyOpenSSL version 0.10 or later must be installed before this module can be used.)�HAS_SSL�OpenSSL_versionr �X509_EXT_ENABLED�log�debug� r r �D/opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/tls.py�__virtual__� s ���r c C s( t �t�� �\} }t|�}| d�|� �S )zD
Return a Unix timestamp as a string of digits
:return:
�f)�math�modf�time�int)�val1Zval2r r r
�
_microtime� s r c C s t �| td | ��S )zt
Return the value corresponding to the key in __context__ or if not present,
fallback to config.option.
z
config.option)�__context__�get�__salt__)�keyr r r
�_context_or_config� s r c C s | p t d�p t d�S )z�
Return the base path for certs from CLI or from options
cacert_path
absolute path to ca certificates root directory
CLI Example:
.. code-block:: bash
salt '*' tls.cert_base_path
�ca.contextual_cert_base_pathzca.cert_base_path)r ��cacert_pathr r r
�cert_base_path� s
��r c C s t | �S )z!
Retrocompatible wrapper
)r r r r r
�_cert_base_path� s r c C s | r| t d<