Listando domínios em um certificado SSL UCC / SAN

15

Existe uma maneira de listar todos os domínios em um certificado SSL SAN / UCC (idealmente usando a linha de comando no linux / os x)?

Claramente, deve haver alguma maneira de extrair os dados, pois os navegadores podem fazê-lo. Infelizmente, posso ver a lista, mas não consigo recortar e colar.

Jordan Reiter
fonte

Respostas:

25

openssl x509 -text < foo.crt deve fazer o truque.

Dan Pritts
fonte
3
Para a posteridade, este é o comando completo que eu usei, já que estava fazendo isso para outro servidor:openssl s_client -showcerts -connect www.example.org:443 | openssl x509 -text
Jordan Reiter
3
Para obter uma lista de domínios delimitados por um espaço limpo, você pode passá-lo através do grep e sed assimopenssl x509 -text < $CRT | grep 'DNS:' | sed 's/\s*DNS:\([a-z0-9.\-]*\)[,\s]\?/\1 /g'
Geoffrey
Por favor, vá para baixo: a resposta de panticz.de é melhor ;-)
lucaferrario
9

Você pode listar os domínios com este comando (testado no linux):

cat cert.pem | openssl x509 -text | grep DNS
panticz.de
fonte
Este fornece uma saída melhor do que a resposta aceita.
VaTo 02/04/19
Sim, esta deve ser a resposta aceita.
Kal
1

Se você apenas deseja ver as SANs, grep DNS:é a solução óbvia.

Se você quiser ter uma lista mais limpa para processar ainda mais, poderá usar este regex Perl para extrair apenas os nomes: @names=/\sDNS:([^\s,]+)/g

Por exemplo:

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);'

O que produziria isso:

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

Então você pode canalizar isso para while read name; do echo "processing $name ..."; doneetc.

Ou, para uma lista separada por vírgula em uma linha, substitua join("\n",porjoin(",",

(A -0777opção para perl faz com que leia toda a entrada de uma só vez, em vez de linha por linha)

mivk
fonte