
[Originalmentepublicado en Slack Overflow, pero el hilo de comentarios se quejó del lugar inadecuado.]
Estamos trabajando para cambiar de los certificados SSL de StartCom a Let's Encrypt e intentar configurarlo para que funcione automáticamente con macOS Server + Apache HTTPD. Desde la herramienta de línea de comandos ( security import
), macOS Server no acepta .pem
archivos directos; debe proporcionarle un .p12
archivo del cual extrae .pem
archivos para configurar en Apache. Molesto e inútil, pero es con lo que tenemos que vivir por ahora.
Para crear este .p12
archivo, tenemos que ejecutar este comando:
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
Y aquí es donde se pone raro. El example.com.p12
archivo de salida tiene el example.com
certificado.dos veces, seguido del certificado CA intermedio Let's Encrypt, seguido del certificado ancla DST Root CA X3 autofirmado innecesario (que todos los navegadores tienen instalado de forma predeterminada) y, finalmente, seguido de la clave privada. El resultado es que el protocolo de enlace Apache SSL incluye el certificado del servidor dos veces, el certificado de CA intermedio y el certificado raíz (que no debería enviar), lo que genera advertencias en el probador de Qualys SSL Labs.
Miramos dentro cert.pem
y solo contiene el certificado del servidor (y solo una vez). chain.pem
solo contiene el certificado de CA intermedio (no el ancla raíz ni el certificado del servidor). privkey.pem
Sólo contiene la clave privada. También lo openssl pkcs12 -export
es duplicar el certificado del servidor y luego dar el paso adicional de buscar el certificado de anclaje raíz y agregarlo.
Si ejecutamos este mismo comando en openSUSE Linux, el .p12
archivo de salida solo tiene el certificado del servidor (una vez), el certificado de CA intermedia y la clave privada. Sin anclaje de raíz.
Probamos las siguientes variaciones y no vimos diferencias en el resultado:
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
La única forma en que puedo duplicar el comportamiento incorrecto del certificado de servidor duplicado en una máquina Linux es hacer lo siguiente (pero aún no incluye el ancla raíz):
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
(Tenga en cuenta que el uso de fullchain.pem
en lugar de chain.pem
junto con el uso de cert.pem
... tiene mucho sentido por qué se duplicaría el certificado del servidor, pero ese no es el comando que estamos usando en Mac OS X).
¿Alguna idea de cómo llegar openssl pkcs12 -export
a hacer lo correcto aquí?