Eu tenho um arquivo SSL CRT no formato PEM. Existe uma maneira de extrair o nome comum (CN) do certificado da linha de comando?
openssl
certificates
Naftuli Kay
fonte
fonte
Respostas:
Se você
openssl
instalou, você pode executar:fonte
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)sed
comandos 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 adicionalsed
:openssl x509 -noout -subject -in server.pem | sed 's/^.*CN=//' | sed sed 's/\/.*$//'
.openssl x509 -noout -subject -nameopt multiline | grep commonName
ou apenas para o valor| sed -n 's/ *commonName *= //p'
Observe que está direcionando o arquivo para a entrada padrão via
<
, não o usando como argumento. Sansegrep
isso imprimirá o certificado inteiro, mas o CN está noSubject:
campo próximo ao topo (cuidado, também há um valor CN noIssuer:
campo).certtool
faz parte do gnutls, se não estiver instalado, procure por isso. O GnuTLS é um pouco melhor que o OpenSSL, IMO.fonte
gnutls-certtool
que foi instalado via #brew install gnutls
gnutls-bin
Encontrei a resposta acima e achei muito útil, mas também achei que a
certtool
sintaxe 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 comman certtool
, portanto, o comando apropriado parece ser"d"
"exibição". Então, este comando:(A extensão do arquivo no meu caso simplesmente
.crt
não é.pem
... isso não é relevante.)... produz resultados que, na parte relevante, se parecem com isso:
Inquestionavelmente, os goldilocks estavam certos:
certtool
é muito mais fácil trabalhar com a saída do queopenssl
neste caso.fonte
certtool
opções que aceitasse os operadores usuais (-
ou--
), eman certtool
para 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:Eu usei:
openssl x509 -noout -subject -in mycert.crt | awk -F= '{print $NF}'
add| sed -e 's/^[ \t]*//'
Se você não pode viver com o espaço em brancofonte