El protocolo SSL tiene un código de alerta para cuando la CA es desconocida ... supongo que podría detectarlo usando algo como tshark.
pero más útil es saber cómo evitar el problema. En Apache, asegúrese de tener las siguientes TRES directivas:
SSLCertificateFile /etc/pki/tls/certs/myserver.cert
SSLCertificateKeyFile /etc/pki/tls/private/myserver.key
SSLCertificateChainFile /etc/pki/tls/certs/myserver.ca-bundle
Las extensiones dadas a los nombres de archivo realmente no le importan a Apache. En este caso, el SSLCertificateFile será un solo certificado X.509 con el Asunto del servidor, y el SSLCertificateChainFile será una concatenación de certificados CA intermedios y raíz (comenzando con la raíz primero).
Aquí hay un script útil para ayudar a explorar las cadenas de certificados en la codificación PEM.
#!/bin/bash
#
# For an input of concatenated PEM ("rfc style") certificates, and a
# command-line consisting of a command to run, run the command over each PEM
# certificate in the file. Typically the command would be something like
# 'openssl x509 -subject -issuer'.
#
# Example:
#
# ssl-rfc-xargs openssl x509 -subject -issuer -validity -modulus -noout < mynewcert.pem
#
sed -e 's/^[ \t]*<ds:X509Certificate>\(.*\)$/-----BEGIN CERTIFICATE-----\n\1/' \
-e 's/^[ \t]*<\/ds:X509Certificate>[ \t]*$/-----END CERTIFICATE-----\n/' \
-e 's/^\(.*\)<\/ds:X509Certificate>[ \t]*$/\1\n-----END CERTIFICATE-----\n/' \
| gawk -vcommand="$*" '
/^-----BEGIN /,/^-----END / {
print |& command
}
/^-----END / {
while ((command |& getline results) > 0) {
print results
}
close(command)
}
'
(este script en particular también se usa para una aplicación XML en particular, que es lo que los bits sed cerca del inicio deben soportar; los bits interesantes son hechos por gawk).
Aquí hay un ejemplo de cómo puede usarlo (por ejemplo, para determinar que los certificados en el paquete CA están en el orden correcto, a veces esto es importante)
$ openssl s_client -connect google.com:443 -showcerts </dev/null 2>&1 | ssl-rfc-xargs openssl x509 -subject -issuer -noout
subject= /C=US/ST=California/L=Mountain View/O=Google Inc/CN=google.com
issuer= /C=US/O=Google Inc/CN=Google Internet Authority G2
subject= /C=US/O=Google Inc/CN=Google Internet Authority G2
issuer= /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
subject= /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
issuer= /C=US/O=Equifax/OU=Equifax Secure Certificate Authority
Observe cómo el emisor de un certificado es adyacente al sujeto de los padres [inmediatamente debajo]
Aquí hay otro ejemplo de cómo puede usar ese script para inspeccionar un archivo local.
$ < /etc/pki/tls/certs/example.ca-bundle ssl-rfc-xargs openssl x509 -subject -issuer -noout