Listado de dominios en un certificado SSL UCC / SAN

15

¿Hay alguna manera de enumerar todos los dominios en un Certificado SSL SAN / UCC (idealmente usando la línea de comando en linux / os x)?

Claramente, debe haber alguna forma de extraer los datos, ya que los navegadores pueden hacerlo. Desafortunadamente, puedo ver la lista pero no puedo cortarla y pegarla.

Jordan Reiter
fuente

Respuestas:

25

openssl x509 -text < foo.crt debería hacer el truco.

Dan Pritts
fuente
3
Para la posteridad, este es el comando completo que utilicé, ya que lo estaba haciendo para otro servidor:openssl s_client -showcerts -connect www.example.org:443 | openssl x509 -text
Jordan Reiter
3
Para obtener una lista de dominios delimitada por espacios limpios, puede pasarla a través de grep y sed asíopenssl x509 -text < $CRT | grep 'DNS:' | sed 's/\s*DNS:\([a-z0-9.\-]*\)[,\s]\?/\1 /g'
Geoffrey
Desplácese hacia abajo: la respuesta de panticz.de es mejor ;-)
lucaferrario
10

Puede enumerar los dominios con este comando (probado en Linux):

cat cert.pem | openssl x509 -text | grep DNS
panticz.de
fuente
Este da un mejor resultado que la respuesta aceptada.
VaTo
Sí, esta debería ser la respuesta aceptada en su lugar.
Kal
1

Si solo desea ver las SAN, grep DNS:es la solución obvia.

Si desea tener una lista más limpia para procesar más, puede usar esta expresión regular de Perl para extraer solo los nombres: @names=/\sDNS:([^\s,]+)/g

Por ejemplo:

true | openssl s_client -connect example.com:443 2>/dev/null \
| openssl x509 -noout -text \
| perl -l -0777 -ne '@names=/\bDNS:([^\s,]+)/g; print join("\n", sort @names);'

Lo que generaría esto:

example.com
example.edu
example.net
example.org
www.example.com
www.example.edu
www.example.net
www.example.org

Entonces podrías canalizar eso a while read name; do echo "processing $name ..."; doneetc.

O para una lista separada por comas en una línea, reemplace join("\n",conjoin(",",

(El -0777interruptor para perl hace que lea toda la entrada a la vez en lugar de línea por línea)

mivk
fuente