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

À propos du projet

Manages X509 public and secret keys

Installer
ansible-galaxy install trombik.x509_certificate
Licence
isc
Téléchargements
5.7k
Propriétaire
PGP finger print: 03EB 3D97 5E04 9B0C AB21 93A2 D693 42A9 EFBC 3577 Makerspace and Coliving in Siem Reap, Cambodia: http://info.mkrsgh.org/