Tenho o privilégio de manipular ~ 5 CSRs SSL por semana, verificando sua validade antes de transmiti-los à nossa CA para ação. Uso o OpenSSL em uma máquina Ubuntu para verificar se eles são válidos, testando coisas como o nome correto da UO, uma CN sensata, tamanho da chave> = 2048 bits e assim por diante, pois nossos pedidos às vezes são incorretos.
Outro dia, recebi uma solicitação de renovação de uma máquina IIS7. Não consigo descobrir como ler isso, usando o OpenSSL. É válido, pois minha CA o aceitou ...
'file (1)' diz que é um "texto de solicitação de assinatura de certificado de segurança RFC1421", que é o que diz para ~ 50% dos CSRs que tenho aqui (o restante é "solicitação de certificado PEM").
$ head iis7rcsr
-----BEGIN NEW CERTIFICATE REQUEST-----
MIIQsQYJKoZIhvcNAQcCoIIQojCCEJ4CAQExCzAJBgUrDgMCGgUAMIIJegYJKoZI
hvcNAQcBoIIJawSCCWcwggljMIIIzAIBADCB2zELMAkGA1UEBhMCTloxDTALBgNV
BBEMBDkwNTQxDjAMBgNVBAgMBU90YWdvMRAwDgYDVQQHDAdEdW5lZGluMRwwGgYD
...
...
openssl req
, que lê CSRs (PKCS # 10) não consegue compreendê-lo ...
$ openssl req -in iis7rcsr -text
unable to load X509 request
5156:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1316:
5156:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:380:Type=X509_REQ_INFO
5156:error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error:tasn_dec.c:748:Field=req_info, Type=X509_REQ
5156:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:
Este artigo de Andreas Klein nos blogs do MSDN sugere que os CSRs de renovação do IIS7 são um contêiner PKCS # 7, com um CSR e uma assinatura com base no certificado atual ... mas ainda não consigo lê-lo.
$ openssl pkcs7 -in iis7rcsr -text
unable to load PKCS7 object
6581:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:650:Expecting: PKCS7
Posso usar 'openssl base64' para decodificar o arquivo e, no arquivo binário resultante, vejo sequências que se parecem com o CSR e algumas referências de CA que devem ter vindo de uma assinatura baseada no certificado antigo. Portanto, a idéia de contêiner (CSR, assinatura) parece plausível.
Mas ainda não consigo encontrar uma maneira de ler o RSE! Eu tentei muitas coisas, não vou listar os detalhes aqui, mas aqui estão os pontos altos das variações que eu tentei: pkcs12 pkcs7 PEM DER req x509
Infelizmente, não posso postar o próprio CSR aqui. Alguém pode me ajudar a descobrir uma maneira de ler / verificar este arquivo?
openssl asn1parse
pode ler a solicitação e a partir daí posso extrair o CSR normal. Eu não posso auto-resposta ainda (resolvido muito rapidamente), então eu vou atualizar a questão com a solução, e depois corrigi-lo amanhã :-)