[ Publié à l' origine sur Slack Overflow , mais le fil de commentaires s'est plaint d'un lieu inapproprié.]
Nous travaillons au passage des certificats SSL StartCom à Let's Encrypt et essayons de le configurer pour qu'il fonctionne automatiquement avec macOS Server + Apache HTTPD. À partir de l'outil de ligne de commande ( security import
), macOS Server n'accepte pas les .pem
fichiers simples . Vous devez lui attribuer un .p12
fichier à partir duquel il extrait les .pem
fichiers à configurer dans Apache. Ennuyeux et inutile, mais c'est ce que nous devons vivre pour le moment.
Pour créer ce .p12
fichier, nous devons exécuter cette commande:
openssl pkcs12 -export \
-inkey /etc/letsencrypt/live/example.com/privkey.pem \
-in /etc/letsencrypt/live/example.com/cert.pem \
-certfile /etc/letsencrypt/live/example.com/chain.pem \
-out /etc/letsencrypt/live/example.com/example.com.p12
Et voici où ça devient bizarre. Le example.com.p12
fichier de sortie a le example.com
certificat deux fois , suivi du certificat d'autorité intermédiaire Let's Encrypt, suivi du certificat d'ancre d'authentification inutile et auto-signé de la racine DST (que tous les navigateurs y ont installés par défaut), et enfin suivi de la clé privée. . Il en résulte que le protocole SSL Apache inclut le certificat de serveur deux fois, le certificat de l'autorité de certification intermédiaire et le certificat racine (qu'il ne devrait pas envoyer), ce qui entraîne des avertissements sur le testeur Qualys SSL Labs.
Nous avons regardé à l'intérieur cert.pem
, et il ne contient que le certificat de serveur (et une seule fois). chain.pem
contient uniquement le certificat de l'autorité de certification intermédiaire (pas l'ancre racine ni le cert du serveur). privkey.pem
contient uniquement la clé privée. Il en openssl pkcs12 -export
va de même pour la duplication du certificat de serveur, puis pour l'étape supplémentaire consistant à rechercher le certificat d'ancrage racine et à l'ajouter.
Si nous exécutons cette même commande sur openSUSE Linux, le .p12
fichier de sortie ne contient que le certificat du serveur (une fois), le certificat de l'autorité de certification intermédiaire et la clé privée. Aucune ancre de racine.
Nous avons essayé les variations suivantes et n'avons constaté aucune différence de production:
openssl pkcs12 -export \
-inkey /etc/letsencrypt/live/example.com/privkey.pem \
-in /etc/letsencrypt/live/example.com/fullchain.pem \
-out /etc/letsencrypt/live/example.com/example.com.p12
openssl pkcs12 -export \
-inkey /etc/letsencrypt/live/example.com/privkey.pem \
-certfile /etc/letsencrypt/live/example.com/fullchain.pem \
-out /etc/letsencrypt/live/example.com/example.com.p12
Le seul moyen de dupliquer le comportement incorrect du certificat de serveur doublé sur une machine Linux consiste à effectuer les opérations suivantes (sans toutefois inclure l'ancre racine):
openssl pkcs12 -export \
-inkey /etc/letsencrypt/live/example.com/privkey.pem \
-in /etc/letsencrypt/live/example.com/cert.pem \
-certfile /etc/letsencrypt/live/example.com/fullchain.pem \
-out /etc/letsencrypt/live/example.com/example.com.p12
(Notez que l'utilisation de fullchain.pem
plutôt que chain.pem
conjointement avec l'utilisation de cert.pem
... indique parfaitement pourquoi le certificat de serveur serait dupliqué, mais ce n'est pas la commande que nous utilisons sur Mac OS X.)
Une idée de comment faire openssl pkcs12 -export
pour faire la bonne chose ici?
OpenSSL 0.9.8zh 14 Jan 2016
n'est-ce pas si vieux ...
openssl version
rendements OpenSSL 0.9.8zh 14 Jan 2016
sur mon ordinateur local exécutant Sierra, mais en réalité LibreSSL 2.2.7
sur le serveur sur lequel ce script de certificat est exécuté (High Sierra). Alors peut-être que c'est un bogue dans LibreSSL? Je devrais mettre à jour le titre et les balises, mais je vais d'abord le tester ce soir pour voir si le comportement est différent.