« PKI : Installation de DogTag avec backend LDAP » : différence entre les versions

De Adadov.net wiki
Ligne 331 : Ligne 331 :
Le script d'installation va mettre en place les fichiers préconfigurés et initialiser le LDAP avec les fichiers LDIF fournis.
Le script d'installation va mettre en place les fichiers préconfigurés et initialiser le LDAP avec les fichiers LDIF fournis.


Il nécessite d'avoir un fichier {{Path|~/.pwd/directorymanager}} contenant le mot de passe du directory manager.<syntaxhighlight lang="bash">
 
 
Il nécessite d'avoir un fichier {{Path|~/.pwd/directorymanager}} contenant le mot de passe du directory manager.
 
===== Script de déploiement =====
<syntaxhighlight lang="bash">
DGHOST=pki.exemple.com
DGHOST=pki.exemple.com
INSTANCE=pki-tomcat
INSTANCE=pki-tomcat
Ligne 342 : Ligne 347 :
scp *.conf root@${DGHOST}:/etc/pki/${INSTANCE}/acme/
scp *.conf root@${DGHOST}:/etc/pki/${INSTANCE}/acme/
cat <<EOF | ssh root@${DGHOST} 'bash'
cat <<EOF | ssh root@${DGHOST} 'bash'
[copier le contenu de tmp.sh ici ]
EOF
</syntaxhighlight>{{Collapse top|Script tmp.sh}}<syntaxhighlight lang="bash">
cat /etc/pki/${INSTANCE}/acme/database/ds/schema.ldif    {{!}} ldapadd -H ldap://${LDAPHOST}:${LDAPPORT} -D cn=directorymanager -y ~/.pwd/directorymanager -c -x
cat /etc/pki/${INSTANCE}/acme/database/ds/schema.ldif    {{!}} ldapadd -H ldap://${LDAPHOST}:${LDAPPORT} -D cn=directorymanager -y ~/.pwd/directorymanager -c -x
cat /etc/pki/${INSTANCE}/acme/database/ds/create.ldif    {{!}} sed -e "s/dc=example,dc=com/${BASEDN}/" \
cat /etc/pki/${INSTANCE}/acme/database/ds/create.ldif    {{!}} sed -e "s/dc=example,dc=com/${BASEDN}/" \
Ligne 360 : Ligne 369 :
     -e "s/{rootSuffix}/dc=${suffix},dc=pki,${BASEDN}/" {{!}}ldapadd -H ldap://${LDAPHOST}:${LDAPPORT} -D cn=directorymanager -y ~/.pwd/directorymanager -c -x
     -e "s/{rootSuffix}/dc=${suffix},dc=pki,${BASEDN}/" {{!}}ldapadd -H ldap://${LDAPHOST}:${LDAPPORT} -D cn=directorymanager -y ~/.pwd/directorymanager -c -x
pki-server acme-deploy -i ${INSTANCE}
pki-server acme-deploy -i ${INSTANCE}
EOF
 
</syntaxhighlight>
</syntaxhighlight>{{Collapse bottom}}


===Fichier de déploiement de la PKI===
===Fichier de déploiement de la PKI===

Version du 15 janvier 2023 à 03:24

Article en cours de rédaction ou de modification !
WorkInProgress.png
Le présent article est actuellement en cours de rédaction ou de modification.
Adressez-vous à la personne en charge pour toute proposition ou modification.
Auteur / Editeur : Adadov
Dernière édition : 15/01/2023
Ecrit Par : Adadov

Une bonne PKI n'est pas forcément utile pour tout le monde, la plupart du temps une installation avec les paramètres par défaut suffira. Vous trouverez pleins de documentations sur le net pour ces cas.

Mais dans certains cas, il faut aller plus loin ... Que ce soit par challenge personnel ou besoin précis, les choses se corsent vite ... Documentations manquantes, petites erreurs et autres dysfonctionnement.

On peut vite passer des heures à s'arracher les cheveux.

Donc après avoir agravé mon état de stress, je documente ici mon travail afin de m'aider moi tout en essayant d'éviter le burnout à d'autres par la même occasion.

Backend LDAP sur 389 DS

Pour les LDAP, je ne vais pas m'étendre ici je ferais une documentation séparée.

Nous utilisons actuellement 3 LDAP 389 DS en réplication multi-maitres.

Après de nombreux tests avec des bases de données séparées et des sous-suffixe, je suis revenu au suffixe unique qui simplifie grandement le déploiement (et le redéploiment ...)

Fichier de déploiement LDAP

Voici le fichier de configuration des instances utilisé pour le stockage de notre PKI:

Ce fichier est fait pour être modifié via sed avant son utilisation.

On trouve 4 balises à remplacer dans ce fichier:

  • ##NUM## : Le numéro du LDAP afin de pouvoir déployer facilement ldap01 ldap02 ldap03 ...
  • ##SUFFIX## : Le suffix principal ou basedn
  • ##PASSWD##: Le password du DirectoryManager
  • ##REPLPASSWD## : Le password du ReplicationManager

Déploiement de la PKI

J'ai choisi de limiter le déploiement initial aux services suivants:

  • CA: en même temps c'est le cœur du sujet
  • OCSP: Afin de fournir en live aux serveurs les statuts des certificats
  • KRA: Pour faciliter la gestion des clés

Ce petit ensemble m'a déjà pris plusieurs semaines de tests et recherches pour obtenir un résultat qui me convienne et qui fonctionne ... Vous verrez en bas quelques bugs rencontrés ...

Le certificat racine est externe, signé par une autre CA stockée hors ligne afin de la sécurisée.

Le certificat est importé automatiquement lors du déploiement, il se trouve dans le fichier pki-ecc.p12 avec sa chaine complète.

Description du fichier de déploiement

Variables personnalisées

ldap_host = ldap.exemple.com
ldap_port = 389
secdomain_name = secdomain
secdomain_user = secdomadmin
basedn = dc=pki,dc=exemple.com
pki_dns_domainname = exemple.com

Configuration des certificats

Pour chaque certificats on peut définir les paramètes suivant afin de les customiser comme on veut:

pki_ca_signing_nickname

Alias utilisé dans NSS DB

pki_ca_signing_key_size

Taille de la clé (pour une externe, elle doit aussi correspondre)

  • Pour RSA: 1024, 2048, 3072, 4096
  • Pour ECC: nitsp256, nitsp384, nitsp521
pki_ca_signing_key_type

Méthode chiffrement utilisée

rsa ou ecc

pki_ca_signing_key_algorithm

Type de signature utilisée pour la clé

pki_ca_signing_signing_algorithm

Encodage utilisée par la clé lorsqu'elle signe un certificat

pki_ca_signing_subject_dn

DN du certificat

Ce qui donne pour un certificat RSA:

pki_transport_nickname = pki_kra_transport
pki_transport_key_size = 2048
pki_transport_key_type = rsa
pki_transport_key_algorithm = SHA512withRSA
pki_transport_signing_algorithm = SHA512withRSA

Et pour un certificat ECC:

pki_audit_signing_nickname = pki_kra_audit_sign
pki_audit_signing_key_size = nistp521
pki_audit_signing_key_type = ecc
pki_audit_signing_key_algorithm = SHA512withEC
pki_audit_signing_signing_algorithm = SHA512withEC

Configuration de l'instance

pki_hostname = pki.exemple.com
pki_https_port = 8443
pki_http_port = 8080
pki_instance_name = pki-tomcat

Configuration des certificats à importer

pki_import_system_certs = True
pki_import_admin_cert = False

Configuration du compte administrateur

pki_admin_uid = caadmin
pki_admin_name = %(pki_admin_uid)s
pki_admin_email = %(pki_admin_name)s@%(pki_dns_domainname)s
pki_admin_nickname = %(pki_admin_uid)s
pki_admin_subject_dn = cn = PKI Admin, o = %(pki_security_domain_name)s

Configuration du domaine de sécurité

pki_security_domain_name = %(secdomain_name)s
pki_security_domain_user = %(secdomain_user)s

Configuration du serveur LDAP

pki_ds_hostname = %(ldap_host)s
pki_ds_ldap_port = %(ldap_port)s
pki_ds_secure_connection = False
pki_ds_base_dn = dc=ca,%(basedn)s
pki_ds_bind_dn = cn=dirman
pki_ds_database = userroot
pki_ds_create_new_db = False
pki_ds_remove_data = True

Configuration du partage d'accès

pki_share_db = True
pki_share_dbuser_dn = uid=pkidbuser, ou=people, dc=ca, %(basedn)s

Configurations propres à la CA

pki_existing = True
pki_random_serial_numbers_enable = True
pki_pkcs12_path = /root/pki-ecc.p12

Import du certificat racine

Comme dit précédemment, mon certificat racine vient d'une autre CA.

Il nous faut donc importer tout ça pour que notre déploiement se passe le mieux possible.

On initialise le stockage de certificats de notre utilisateur local, puis on importe la chaine de la CA dedans.

Attention, vous importerez aussi la clé privé de la CA, pensez à la supprimer ou réinitialiser votre stockage après l'installation !

[root@linux] # pki client init --forcedblclick to copy
[root@linux] # pki pkcs12 import --pkcs12 pki-ecc.p12 --password Secret.123

Installation de la CA

[root@linux] # pkispawn -f ca.cfg -s CA -vdblclick to copy

Installation de la KRA

[root@linux] # pkispawn -f ca.cfg -s KRA -vdblclick to copy

Installation d'OCSP

[root@linux] # pkispawn -f ca.cfg -s OCSP -vdblclick to copy

Installation d'ACME

Pour me simplifier l'installation j'ai préconfiguré les 4 fichiers ci-dessous et le script les envoie sur le serveur pendant le déploiement d'ACME.

Fichier database.conf

class=org.dogtagpki.acme.database.DSDatabase
url=ldap://ldap.exemple.com:389
authType=BasicAuth
bindDN=cn=directorymanager
bindPassword=
baseDN=dc=acme,dc=pki,dc=exemple,dc=com

Fichier realm.conf

class=org.dogtagpki.acme.realm.DSRealm
url=ldap://ldap.exemple.com:389
authType=BasicAuth
bindDN=cn=directorymanager
bindPassword=
usersDN=ou=people,dc=ca,dc=pki,dc=exemple,dc=com
groupsDN=ou=groups,dc=ca,dc=pki,dc=exemple,dc=com

Fichier issuer.conf

class=org.dogtagpki.acme.issuer.PKIIssuer
url=https://pki.exemple.com:8443
profile=acmeServerCert
username=
password=

Fichier metadata.conf

termsOfService=https://pki.exemple.com/acme/tos.pdf
website=https://pki.exemple.com
caaIdentities=exemple.com
externalAccountRequired=false

Script d'installation

Le script d'installation va mettre en place les fichiers préconfigurés et initialiser le LDAP avec les fichiers LDIF fournis.


Il nécessite d'avoir un fichier ~/.pwd/directorymanager contenant le mot de passe du directory manager.

Script de déploiement
DGHOST=pki.exemple.com
INSTANCE=pki-tomcat
LDAPHOST=ldap.exemple.com
LDAPPORT=389
BASEDN=dc=exemple,dc=com
SUFFIX=acme

ssh root@${DGHOST} pki-server acme-create -i ${INSTANCE}
scp *.conf root@${DGHOST}:/etc/pki/${INSTANCE}/acme/
cat <<EOF | ssh root@${DGHOST} 'bash'
[copier le contenu de tmp.sh ici ]
EOF