Eu tenho um arquivo SSL CRT no formato PEM. Existe uma maneira de extrair o nome comum (CN) do certificado da linha de comando?
Eu tenho um arquivo SSL CRT no formato PEM. Existe uma maneira de extrair o nome comum (CN) do certificado da linha de comando?
Respostas:
Se você opensslinstalou, você pode executar:
openssl x509 -noout -subject -in server.pem
openssl x509 -noout -subject -in server.pem | sed -n '/^subject/s/^.*CN=//p'
sed -e 's/^subject.*CN=\([a-zA-Z0-9\.\-]*\).*$/\1/'para obter apenas o domínio, pois eu tinha detalhes adicionais após a CN. A sua não é super-estrita correspondência para um CN válido, mas na maioria dos casos ele funciona, você poderia ser mais folga e substituir [a-zA-Z0-9\.\-]com [^/], mas não estou certo de que seria sempre funciona.
\*ao que @flungo utilizados para apoiar domínios curinga: sed -e 's/^subject.*CN=\([a-zA-Z0-9\.\-\*]*\).*$/\1/' ( [^/]funciona no meu caso, embora)
sedcomandos sugeridos acima não funcionarão se o certificado tiver RDNs (Nomes Relativos Distintos) especificados após o Nome Comum (CN), por exemplo, OU (Unidade Organizacional) ou C (País). Uma maneira de atender a esses casos seria um adicional sed: openssl x509 -noout -subject -in server.pem | sed 's/^.*CN=//' | sed sed 's/\/.*$//'.
openssl x509 -noout -subject -nameopt multiline | grep commonNameou apenas para o valor| sed -n 's/ *commonName *= //p'
certtool -i < whatever.pem | egrep "^\s+Subject:"
Observe que está direcionando o arquivo para a entrada padrão via <, não o usando como argumento. Sans egrepisso imprimirá o certificado inteiro, mas o CN está no Subject:campo próximo ao topo (cuidado, também há um valor CN no Issuer:campo).
X.509 Certificate Information:
Version: 3
Serial Number (hex): 01
Issuer: [...] CN=unixandlinux.ex <- Not this one.
Validity: ...
Subject: CN=goldilocks
certtoolfaz parte do gnutls, se não estiver instalado, procure por isso. O GnuTLS é um pouco melhor que o OpenSSL, IMO.
gnutls-certtoolque foi instalado via #brew install gnutls
gnutls-bin
Encontrei a resposta acima e achei muito útil, mas também achei que a certtoolsintaxe do comando (no Ubuntu Linux hoje) era visivelmente diferente da descrita por goldilocks, assim como a saída. Por isso, achei melhor atualizar essa excelente resposta com o que poderia ser a "versão de hoje".
A "i"opção (agora?) Significa "importação", de acordo com man certtool, portanto, o comando apropriado parece ser "d""exibição". Então, este comando:
certtool d myfoo.crt
(A extensão do arquivo no meu caso simplesmente .crtnão é .pem... isso não é relevante.)
... produz resultados que, na parte relevante, se parecem com isso:
Common Name : Foobar
Inquestionavelmente, os goldilocks estavam certos: certtoolé muito mais fácil trabalhar com a saída do que opensslneste caso.
certtoolopções que aceitasse os operadores usuais ( -ou --), e man certtoolpara as versões 3.5.8 (debian), 3.5.16 (fedora, a única versão depois disso no ramo estável upstream) é 3.5.17. há um mês), a documentação online do GnuTLS e, de fato, a página de manual online do Ubuntu 17.10 (mesma versão do debian atual) se referem a: