trombik.x509_certificate
trombik.x509_certificate
Gère les clés secrètes et/ou publiques X509. Le rôle suppose que vous disposez déjà d'une clé secrète valide ou d'une clé publique signée. Ce rôle ne crée ni ne gère les CSR.
Exigences
Le rôle utilise une collection ansible
. Voir requirements.yml
.
Variables de rôle
Variable | Description | Par défaut |
---|---|---|
x509_certificate_dir |
chemin vers le répertoire par défaut pour conserver les certificats et les clés | {{ __x509_certificate_dir }} |
x509_certificate_packages |
liste de paquets à installer pour gérer les clés, c'est-à-dire valider les certificats | {{ __x509_certificate_packages }} |
x509_certificate_default_owner |
propriétaire par défaut des clés | {{ __x509_certificate_default_owner }} |
x509_certificate_default_group |
groupe par défaut des clés | {{ __x509_certificate_default_group }} |
x509_certificate_additional_packages |
liste de paquets supplémentaires à installer. Ils sont installés avant la gestion des certificats et des clés. Utile lorsque le propriétaire des fichiers n'existe pas, mais doit être créé par un autre rôle ou une autre tâche plus tard. L'utilisation de cette variable nécessite des précautions. Lorsqu'un paquet est installé par ce rôle, les tâches d'installation de paquets après ce rôle ne seront pas déclenchées, ce qui pourrait avoir des effets inattendus. Dans ce cas, créez vous-même l'utilisateur et le groupe | [] |
x509_certificate_validate_command |
commande pour valider le certificat et les clés. La commande doit être définie dans x509_certificate_validate_command_secret et x509_certificate_validate_command_public en tant que clé |
openssl |
x509_certificate_validate_command_secret |
dictionnaire de commande pour valider la clé secrète (voir ci-dessous) | {"openssl"=>"openssl rsa -check -in %s"} |
x509_certificate_validate_command_public |
dictionnaire de commande pour valider la clé publique (voir ci-dessous) | {"openssl"=>"openssl x509 -noout -in %s"} |
x509_certificate |
clés à gérer (voir ci-dessous) | [] |
x509_certificate_debug_log |
active l'enregistrement des données sensibles pendant l'exécution si yes . Notez que le journal affichera la valeur de x509_certificate , y compris la clé secrète, si yes |
no |
x509_certificate_update_ca_store_command |
Commande à exécuter lorsque le magasin de certificats CA racine est mis à jour | {{ __x509_certificate_update_ca_store_command }} |
x509_certificate_cfssl_scheme |
partie schématique de l'URL cfssl |
https |
x509_certificate_cfssl_host |
partie hôte de l'URL cfssl |
127.0.0.1 |
x509_certificate_cfssl_port |
Port de cfssl |
8888 |
x509_certificate_cfssl_endpoint_base_path |
partie chemin de l'URL cfssl |
/api/v1/cfssl |
x509_certificate_cfssl_retries |
Nombre de tentatives lors de la connexion à cfssl |
3 |
x509_certificate_cfssl_delay |
Délai en secondes entre les tentatives lors de la connexion à cfssl |
10 |
x509_certificate_cfssl_uri_param |
Paramètres supplémentaires dans un dictionnaire à passer au module ansible uri lors de la connexion à cfssl |
{} |
x509_certificate_cfssl_certificate_newcert |
Une liste de certificats à envoyer à cfssl . Voir ci-dessous |
[] |
x509_certificate_cfssl_info |
Voir ci-dessous | [] |
x509_certificate_commands |
Voir ci-dessous | [] |
x509_certificate_validate_command_secret
Cette variable est un dictionnaire. La clé est le nom de la commande et la valeur est utilisée pour valider les fichiers de clé secrète lors de leur création.
x509_certificate_validate_command_public
Cette variable est un dictionnaire. La clé est le nom de la commande et la valeur est utilisée pour valider les fichiers de certificat public lors de leur création.
x509_certificate
Cette variable est une liste de dictionnaires. Les clés et valeurs sont expliquées ci-dessous.
Clé | Valeur | Obligatoire ? |
---|---|---|
name |
Nom descriptif des clés | oui |
state |
l'un de present ou absent . Le rôle crée la clé lorsque present et supprime la clé lorsque absent |
oui |
public |
un dictionnaire représentant un certificat public | non |
secret |
un dictionnaire représentant une clé secrète | non |
public
et secret
dans x509_certificate
public
et secret
doivent contenir un dictionnaire. Le dictionnaire est expliqué ci-dessous.
Clé | Valeur | Obligatoire ? |
---|---|---|
path |
chemin vers le fichier. si non défini, le fichier sera créé sous x509_certificate_dir , avec $name.pem |
non |
owner |
propriétaire du fichier (par défaut x509_certificate_default_owner ) |
non |
group |
groupe du fichier (par défaut x509_certificate_default_group ) |
non |
mode |
permission du fichier (par défaut 0444 lorsque le fichier est un certificat public, 0400 lorsque le fichier est une clé secrète) |
non |
key |
le contenu de la clé | non |
notify |
une chaîne ou une liste de noms de gestionnaires à notifier | non |
x509_certificate_commands
Cette variable est une liste de dictionnaires. Chaque élément de la liste est un mélange de ansible.builtin.command
et ansible.builtin.file
. L'élément est d'abord transmis à ansible.builtin.command
, qui est censé créer un fichier, et le fichier est corrigé avec les owner
, group
, et mode
spécifiés.
La variable est destinée à une conversion de format de fichier arbitraire, comme une clé secrète en PKCS#1
à une autre clé secrète en PKCS#8
, utilisée par certaines applications, comme Java par exemple.
Les commandes sont exécutées à la fin des tâches.
L'opération n'est pas atomique.
Les clés acceptées sont :
Nom | Description | Obligatoire ? |
---|---|---|
cmd |
Une commande à exécuter | Oui |
creates |
Chemin vers le fichier que la commande doit créer | Oui |
owner |
Nom du propriétaire du fichier | Non |
group |
Nom du groupe du fichier | Non |
mode |
permission du fichier | Non |
notify |
Une chaîne ou une liste de noms de gestionnaires à notifier | Non |
x509_certificate_cfssl_certificate_newcert
Étant donné que cette variable est très expérimentale, elle n'est pas encore documentée intentionnellement.
Voir un exemple dans tests/serverspec/cfssl.yml
.
x509_certificate_cfssl_info
Appelle l'API info
et récupère un certificat CA racine du serveur cfssl
.
Cette variable est une liste de dictionnaires. Les clés dans le dictionnaire sont :
Clé | Description | Obligatoire ? |
---|---|---|
path |
Chemin vers un fichier pour conserver le certificat. | oui |
body |
Un dictionnaire de paramètres de corps à envoyer dans la requête | oui |
notify |
Une liste de gestionnaires à notifier lorsque le fichier de certificat est modifié. Par défaut, il s'agit du gestionnaire Update root CA store (voir ci-dessous) |
non |
x509_certificate_update_ca_store_command
Cette commande est invoquée dans le gestionnaire Update root CA store
avec ansible.builtin.command
.
Gestionnaire Update root CA store
Notifiez le gestionnaire Update root CA store
lorsque vous ajoutez un certificat CA au magasin de certificats CA racine du système.
Ce gestionnaire ne fonctionne pas encore sur OpenBSD.
Inclusion de trombik.x509_certificate
Vous pouvez inclure le rôle dans vos tâches ou rôles. Utilisez vars
pour définir des variables spécifiques au rôle.
- name: Inclure le rôle trombik.x509_certificate
include_role:
name: trombik.x509_certificate
vars:
x509_certificate: "{{ my_variable }}"
x509_certificate_debug_log: yes
Cependant, lorsque vous souhaitez passer une seule variable qui inclut les variables de rôle, vous devez passer votre variable à une variable de rôle de pont spéciale, x509_certificate_vars
.
- name: Inclure le rôle trombik.x509_certificate
include_role:
name: trombik.x509_certificate
vars:
x509_certificate_vars: "{{ my_variable }}"
L'exemple suivant NE fonctionne PAS :
- name: Inclure le rôle trombik.x509_certificate
include_role:
name: trombik.x509_certificate
vars: "{{ my_variable }}"
Voir Issue 19084 pour les détails.
Debian
Variable | Par défaut |
---|---|
__x509_certificate_dir |
/etc/ssl |
__x509_certificate_packages |
["openssl"] |
__x509_certificate_default_owner |
root |
__x509_certificate_default_group |
root |
FreeBSD
Variable | Par défaut |
---|---|
__x509_certificate_dir |
/usr/local/etc/ssl |
__x509_certificate_packages |
[] |
__x509_certificate_default_owner |
root |
__x509_certificate_default_group |
wheel |
__x509_certificate_update_ca_store_command |
/usr/sbin/certctl rehash |
OpenBSD
Variable | Par défaut |
---|---|
__x509_certificate_dir |
/etc/ssl |
__x509_certificate_packages |
[] |
__x509_certificate_default_owner |
root |
__x509_certificate_default_group |
wheel |
__x509_certificate_update_ca_store_command |
echo |
RedHat
Variable | Par défaut |
---|---|
__x509_certificate_dir |
/etc/ssl |
__x509_certificate_packages |
["openssl"] |
__x509_certificate_default_owner |
root |
__x509_certificate_default_group |
root |
__x509_certificate_update_ca_store_command |
update-ca-trust |
Dépendances
Aucune
Exemple de Playbook
---
- hosts: localhost
pre_tasks:
- name: Installer rsyslog sur Fedora
ansible.builtin.yum:
name: rsyslog
state: installed
when:
- ansible_distribution == 'Fedora'
- name: Activer rsyslog
ansible.builtin.service:
name: rsyslog
enabled: yes
when:
- ansible_distribution == 'Fedora'
- name: Démarrer rsyslog
ansible.builtin.service:
name: rsyslog
state: started
when:
- ansible_distribution == 'Fedora'
roles:
- ansible-role-x509_certificate
handlers:
# XXX utilisé uniquement pour les tests
- name: Redémarrer foo
command: "logger foo est notifié"
- name: Redémarrer bar
command: "logger bar est notifié"
- name: Redémarrer buz
command: "logger buz est notifié"
- name: Redémarrer foobar
command: "logger foobar est notifié"
vars:
os_project_some_user:
FreeBSD: www
Debian: www-data
RedHat: ftp
OpenBSD: www
project_some_user: "{{ os_project_some_user[ansible_os_family] }}"
os_project_some_group:
FreeBSD: www
Debian: www-data
RedHat: ftp
OpenBSD: www
project_some_group: "{{ os_project_some_group[ansible_os_family] }}"
os_project_quagga_cert_dir:
FreeBSD: /usr/local/etc/quagga/certs
OpenBSD: /etc/quagga/certs
Debian: /etc/quagga/certs
RedHat: /etc/quagga/certs
project_quagga_cert_dir: "{{ os_project_quagga_cert_dir[ansible_os_family] }}"
os_project_quagga_user:
FreeBSD: quagga
Debian: quagga
RedHat: quagga
OpenBSD: _quagga
project_quagga_user: "{{ os_project_quagga_user[ansible_os_family] }}"
os_project_quagga_group:
FreeBSD: quagga
Debian: quagga
RedHat: quagga
OpenBSD: _quagga
project_quagga_group: "{{ os_project_quagga_group[ansible_os_family] }}"
# XXX NE JAMAIS définir cette variable sur `yes` à moins de savoir ce que vous faites.
x509_certificate_debug_log: yes
x509_certificate_additional_packages:
- quagga
x509_certificate:
- name: foo
state: present
public:
notify:
- Restart foo
- Restart buz
key: |
-----BEGIN CERTIFICATE-----
MIIDOjCCAiICCQDaGChPypIR9jANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJB
VTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0
cyBQdHkgTHRkMRgwFgYDVQQDDA9mb28uZXhhbXBsZS5vcmcwHhcNMTcwNzE4MDUx
OTAxWhcNMTcwODE3MDUxOTAxWjBfMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29t
ZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRgwFgYD
VQQDDA9mb28uZXhhbXBsZS5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQDZ9nd1isoGGeH4OFbQ6mpzlldo428LqEYSH4G7fhzLMKdYsIqkMRVl1J3s
lXtsMQUUP3dcpnwFwKGzUvuImLHx8McycJKwOp96+5XD4QAoTKtbl59ZRFb3zIjk
Owd94Wp1lWvptz+vFTZ1Hr+pEYZUFBkrvGtV9BoGRn87OrX/3JI9eThEpksr6bFz
QvcGPrGXWShDJV/hTkWxwRicMMVZVSG6niPusYz2wucSsitPXIrqXPEBKL1J8Ipl
8dirQLsH02ZZKcxGctEjlVgnpt6EI+VL6fs5P6A45oJqWmfym+uKztXBXCx+aP7b
YUHwn+HV4qzZQld80PSTk6SS3hMXAgMBAAEwDQYJKoZIhvcNAQEFBQADggEBAKgf
x3K9GHDK99vsWN8Ej10kwhMlBWBGuM0wkhY0fbxJ0gW3sflK8z42xMc2dhizoYsY
sLfN0aylpN/omocl+XcYugLHnW2q8QdsavWYKXqUN0neIMr/V6d1zXqxbn/VKdGr
CD4rJwewBattCIL4+S2z+PKr9oCrxjN4i3nujPhKv/yijhrtV+USw1VwuFqsYaqx
iScC13F0nGIJiUVs9bbBwBKn1c6GWUHHiFCZY9VJ15SzilWAY/TULsRsHR53L+FY
mGfQZBL1nwloDMJcgBFKKbG01tdmrpTTP3dTNL4u25+Ns4nrnorc9+Y/wtPYZ9fs
7IVZsbStnhJrawX31DQ=
-----END CERTIFICATE-----
- name: bar
state: present
public:
path: /usr/local/etc/ssl/bar/bar.pub
owner: "{{ project_some_user }}"
group: "{{ project_some_group }}"
mode: "0644"
key: |
-----BEGIN CERTIFICATE-----
MIIDOjCCAiICCQDaGChPypIR9jANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJB
VTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0
cyBQdHkgTHRkMRgwFgYDVQQDDA9mb28uZXhhbXBsZS5vcmcwHhcNMTcwNzE4MDUx
OTAxWhcNMTcwODE3MDUxOTAxWjBfMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29t
ZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRgwFgYD
VQQDDA9mb28uZXhhbXBsZS5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQDZ9nd1isoGGeH4OFbQ6mpzlldo428LqEYSH4G7fhzLMKdYsIqkMRVl1J3s
lXtsMQUUP3dcpnwFwKGzUvuImLHx8McycJKwOp96+5XD4QAoTKtbl59ZRFb3zIjk
Owd94Wp1lWvptz+vFTZ1Hr+pEYZUFBkrvGtV9BoGRn87OrX/3JI9eThEpksr6bFz
QvcGPrGXWShDJV/hTkWxwRicMMVZVSG6niPusYz2wucSsitPXIrqXPEBKL1J8Ipl
8dirQLsH02ZZKcxGctEjlVgnpt6EI+VL6fs5P6A45oJqWmfym+uKztXBXCx+aP7b
YUHwn+HV4qzZQld80PSTk6SS3hMXAgMBAAEwDQYJKoZIhvcNAQEFBQADggEBAKgf
x3K9GHDK99vsWN8Ej10kwhMlBWBGuM0wkhY0fbxJ0gW3sflK8z42xMc2dhizoYsY
sLfN0aylpN/omocl+XcYugLHnW2q8QdsavWYKXqUN0neIMr/V6d1zXqxbn/VKdGr
CD4rJwewBattCIL4+S2z+PKr9oCrxjN4i3nujPhKv/yijhrtV+USw1VwuFqsYaqx
iScC13F0nGIJiUVs9bbBwBKn1c6GWUHHiFCZY9VJ15SzilWAY/TULsRsHR53L+FY
mGfQZBL1nwloDMJcgBFKKbG01tdmrpTTP3dTNL4u25+Ns4nrnorc9+Y/wtPYZ9fs
7IVZsbStnhJrawX31DQ=
-----END CERTIFICATE-----
secret:
path: /usr/local/etc/ssl/bar/bar.key
owner: "{{ project_some_user }}"
group: "{{ project_some_group }}"
notify: Restart bar
key: |
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA2fZ3dYrKBhnh+DhW0Opqc5ZXaONvC6hGEh+Bu34cyzCnWLCK
pDEVZdSd7JV7bDEFFD93XKZ8BcChs1L7iJix8fDHMnCSsDqfevuVw+EAKEyrW5ef
WURW98yI5DsHfeFqdZVr6bc/rxU2dR6/qRGGVBQZK7xrVfQaBkZ/Ozq1/9ySPXk4
RKZLK+mxc0L3Bj6xl1koQyVf4U5FscEYnDDFWVUhup4j7rGM9sLnErIrT1yK6lzx
ASi9SfCKZfHYq0C7B9NmWSnMRnLRI5VYJ6behCPlS+n7OT+gOOaCalpn8pvris7V
wVwsfmj+22FB8J/h1eKs2UJXfND0k5Okkt4TFwIDAQABAoIBAHmXVOztj+X3amfe
hg/ltZzlsb2BouEN7okNqoG9yLJRYgnH8o/GEfnMsozYlxG0BvFUtnGpLmbHH226
TTfWdu5RM86fnjVRfsZMsy+ixUO2AaIG444Y4as7HuKzS2qd5ZXS1XB8GbrCSq7r
iF/4tscQrzoG0poQorP9f9y60+z3R45OX3QMVZxP4ZzxXAulHGnECERjLHM5QzTX
ALV9PHkTRNd1tm9FSJWWGNO5j4CGxFsPL1kdMyvrC7TkYiIiCQ/dd2CIfQyWwyKc
8cHBKnzon0ugr0xlf2B0C7RTXrGAcuBC0yyaLuQTFkocUofgDIFghItH8O8xvvAG
j8HYOwECgYEA9uMLtm2C8SiWFuafrF/pPWvhkBtEHA2g22M29CANrVv1jCEVMti/
7r53fd328/nVxtashnSFz7a3l3s9d9pTR/rk/rNpVS2i7JGvCXXE3DeoD6Zf4utD
MLEs2bI0KabdamIywc77CkVj9WUKd53tlcdcn7AsHwESU4Zjk08ie0kCgYEA4gIa
R+a9jmKEk9l5Gn7jroxDJdI0gEfuA7It5hshEDcSvjF+Fs5+1tVgfBI1Mx4/0Eaj
6E57Ln3WFKPJKuG0HwLNanZcqLFgiC/7ANbyKxfONPVrqC2TClImBhkQ74BLafZg
yY8/N/g/5RIMpYvQ9snBRsah9G2cBfuPTHjku18CgYBHylPQk12dJJEoTZ2msSkQ
jDtF/Te79JaO1PXY3S08+N2ZBtG0PGTrVoVGm3HBFif8rtXyLxXuBZKzQMnp/Rl0
d9d43NDHTQLwSZidZpp88s4y5s1BHeom0Y5aK0CR0AzYb3+U7cv/+5eKdvwpNkos
4JDleoQJ6/TZRt3TqxI6yQKBgA8sdPc+1psooh4LC8Zrnn2pjRiM9FloeuJkpBA+
4glkqS17xSti0cE6si+iSVAVR9OD6p0+J6cHa8gW9vqaDK3IUmJDcBUjU4fRMNjt
lXSvNHj5wTCZXrXirgraw/hQdL+4eucNZwEq+Z83hwHWUUFAammGDHmMol0Edqp7
s1+hAoGBAKCGZpDqBHZ0gGLresidH5resn2DOvbnW1l6b3wgSDQnY8HZtTfAC9jH
DZERGGX2hN9r7xahxZwnIguKQzBr6CTYBSWGvGYCHJKSLKn9Yb6OAJEN1epmXdlx
kPF7nY8Cs8V8LYiuuDp9UMLRc90AmF87rqUrY5YP2zw6iNNvUBKs
-----END RSA PRIVATE KEY-----
x509_certificate_commands:
# XXX libressl ne fonctionne pas avec `-out -`, et l'argument de -inform doit
# être en minuscules.
- cmd: "openssl pkcs8 -inform pem -outform pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -in {{ project_quagga_cert_dir }}/quagga.key -out {{ project_quagga_cert_dir }}/pkcs8.key"
creates: "{{ project_quagga_cert_dir }}/pkcs8.key"
owner: "{{ project_quagga_user }}"
group: "{{ project_quagga_group }}"
mode: "0440"
notify: Restart foobar
Licence
Copyright (c) 2017 Tomoyuki Sakurai <[email protected]>
La permission d'utiliser, de copier, de modifier et de distribuer ce logiciel pour n'importe quel but, avec ou sans frais, est accordée par la présente, à condition que le présent avis de droit d'auteur et ce document de permission apparaissent dans toutes les copies.
LE LOGICIEL EST FOURNI "TEL QUEL" ET L'AUTEUR DÉCLINE TOUTE GARANTIE RELATIVE À CE LOGICIEL Y COMPRIS TOUTE GARANTIE IMPLICITE DE COMMERCIALITÉ ET D'ADÉQUATION. EN AUCUN CAS L'AUTEUR NE SAURAIT ÊTRE RESPONSABLE DE QUELQUE DOMMAGE SPÉCIAL, DIRECT, INDIRECT OU CONSÉCUTIF, OU DE TOUT DOMMAGE QUELCONQUE RÉSULTANT D'UNE PERTE D'UTILISATION, DE DONNÉES OU DE PROFITS, QUE CE SOIT DANS LE CADRE D'UN CONTRAT, D'UNE NÉGLIGENCE OU D'AUTRE ACTION DELICTUELLE, DÉCOULANT DE OU EN RELATION AVEC L'UTILISATION OU LA PERFORMANCE DE CE LOGICIEL.
Informations sur l'auteur
Tomoyuki Sakurai y@trombik.org
Ce README a été créé par qansible
ansible-galaxy install trombik.x509_certificate