Conteudo do Certificados Arquivo .PEM

2,315 views
Skip to first unread message

Daniel Pitta

unread,
Sep 6, 2016, 9:29:41 AM9/6/16
to NFePHP
Bom dia, quando instalamos o certificado no servidor, estou falando do arquivo .PFX a app divide esse arquivo .PFX em 3 arquivo com extensão .PEM.

Como faço para ver o conteúdo desses 3 arquivos.
Eu consigo ver o conteúdo do  certKEY.pem e do pubKEY.pem.
Mas quando executo o mesmo comando no arquivo priKEY.pem aparece um mensagem de erro conforme abaixo


certKEY.pem
openssl x509 -text -in certKEY.pem

pubKEY.pem
openssl x509 -text -in pubKEY.pem

-----------
Nesses 2 comandos acima mostra o conteúdo dos arquivos sem problema
-----------


priKEY.pem
openssl x509 -text -in priKEY.pem

-----------
Já nesse aqui aparece erro
-----------
unable to load certificate
140098883528336:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:696:Expecting: TRUSTED CERTIFICATE


Obrigado

Roberto Machado

unread,
Sep 6, 2016, 9:40:36 AM9/6/16
to nfe...@googlegroups.com
Parceiro ....

Uma chave privada não é um certificado !!!

para fazer algumas verificações use https://kb.wisc.edu/middleware/page.php?id=4064

Roberto

Daniel Pitta

unread,
Sep 6, 2016, 10:15:00 AM9/6/16
to NFePHP
Roberto veja se consegui me ajudar, Ficarei Muito Grato.

Todo certificado ICP-Brasil possui dentro deles informações com CPF, RG, DATA DE NASCIMENTO, etc... do dono do Certificado
Essas informações são norteadas pela ICP-BRASIL conforme documento:

http://www.alvestrand.no/objectid/2.16.76.1.3.4.html


OID value: 2.16.76.1.3.4

OID description:
OID = 2.16.76.1.3.4 e conteúdo = nas primeiras 8 (oito) posições, a data de nascimento do responsável pelo certificado, no formato ddmmaaaa; nas 11 (onze) posições subseqüentes, o Cadastro de Pessoa Física (CPF) do responsável; nas 11 (onze) posições subseqüentes, o número de inscrição do responsável no PIS/PASEP; nas 11 (onze) posições subseqüentes, o número do RG do responsável; nas 6 (seis) posições subseqüentes, as siglas do órgão expedidor do RG e respectiva UF



Estou criando um sistema que gera certificados e precisa colocar essas informações dentro do Certificado..
ESTOU SUANDO a mais de  2 semanas e não estou conseguido avançar muito.




Se por exemplo você tiver um certificado digital e acessar o site do SERPRO nessa opção de teste de Certificados
http://repositorio.serpro.gov.br/testeaqui/

Irá verificar na parte das Extensões as informações que estou falando



2.16.76.1.2.1.10:
  DPC:
    http://repositorio.serpro.gov.br/docs/dpcacserprorfb.pdf
E-mail:COME...@xxxxxxxxxxxx.COM.BR
Extensoes:2.16.76.1.3.4:
  Data de Nascimento: 08/04/19xx
  CPF: 043xxxxxxxx
  Identificação Social – NIS (PIS, PASEP ou CI): 00000000000
  Registro Geral (RG): 000000000000000
2.16.76.1.3.2:
  Nome do responsável: DANIELxxxxxxx
2.16.76.1.3.3:
  CNPJ: 10.570.xxx/0001-xx
2.16.76.1.3.7:
  Cadastro Especifico do INSS (CEI): 000000000000




Estou gerando o meus certificado de teste conforme script que desenvolvi:

Aqui crio a arquivo CSR conforme arquivo myconfig.cnf
openssl req -new  -keyout $nomerepre.key -out $nomerepre.csr -passin pass:$senha -config myconfig.cnf

Assino meu arquivo CSR conforme meu certificado de teste CA.KEY e arquivo myconfig.cnf
openssl x509 -req  -days 365  -in $nomerepre.csr -CA ca.crt -CAkey ca.key -set_serial 10102014 -out $nomerepre.crt -passin pass:$senha -extfile myconfig.cnf  -extensions v3_req


Exporto as Chaves criadas e transformo em PFX
openssl pkcs12 -export -in $nomerepre.crt -inkey $nomerepre.key -out $nomerepre-$HORA.pfx -certfile $nomerepre.crt -passin pass:$senha -passout pass:$senha

----------------------
Conteúdo do arquivo: myconfig.cnf


oid_section = new_oids

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[req_distinguished_name]
C = US
ST = VA
L = SomeCity
O = MyCompany
OU = MyDivision
CN = www.company.com
MySensationalOID= Support Department



[ new_oids ]
2.16.76.1.3.4=00000000111111111112222222222233333333333444444


[v3_req]
2.16.76.1.3.4=ASN1:UTF8String:Something


[ req_ext ]
subjectAltName = email:john....@quovadisglobal.com



SE Puder me ajudar ficarei Muito, Muito Grato mesmo!!!!

Roberto Machado

unread,
Sep 6, 2016, 10:37:55 AM9/6/16
to nfe...@googlegroups.com
Lidar com certificados não é e nunca será algo fácil, pela sua própria natureza.
Mas o caminho que você está fazendo está certo, eu nunca me preocupei com a colocação de OIDs nos certificados apenas com a LEITURA dos mesmos então não tenho muito como ajuda-lo.

Eu já vi o comando  como esse :
openssl ca -config ./my-openssl.cnf -extensions ./my-openssl-extensions.cnf <options>
-extensions section the section of the configuration file containing certificate extensions to be added when a certificate is issued (defaults to x509_extensions unless the -extfile option is used). If no extension section is present then, a V1 certificate is created. If the extension section is present (even if it is empty), then a V3 certificate is created. See the x509v3_config(5)manual page for details of the extension section format.
Talvez te ajude um pouco, outra coisa é referente e forma como o OID deve ser passado para a estrutura, ou seja como será registrado essa pagina talvez ajude https://www.openssl.org/docs/manmaster/crypto/ASN1_generate_nconf.html

Roberto

Daniel Pitta

unread,
Sep 7, 2016, 5:04:44 PM9/7/16
to NFePHP
Realmente é bastante complexo.
Estou tentando fazer uma engenharia reversa pegando um Certificado Valido e tentando achar dentro dele o conteúdo do  OID, mas o complicado é que acho que essas informações ficam encriptadas dentro das Chaves pois ali mostra algumas informações do Certificado relacionados a empresa, mas não mostra de forma de forma explicita
Ex: o nome do representante Legal, Data de Nascimento etc..

Quando o dono do certificado seja ele PF ou PJ até mesmo esse que usamos para emitir notas, essas informações são colocadas dentro do mesmo.


Ex: openssl pkcs12 -in meucertificadoValido.pfx

Isso retorna todo o conteúdo das Chaves incluindo esse campos cifrados que estou desconfiado que é onde estão os OID

Bag Attributes
    localKeyID: 01 00 00 00
    1.3.6.1.4.1.311.17.3.92: 00 08 00 00
    1.3.6.1.4.1.311.17.3.20: 9B CE 4E 76 F6 FE 2A AA D8 E0 0E 3C B7 6E 74 EB 9D 5F 81 E0
    friendlyName: (13385959) MINHA EMPRESA:10570XXXXXXXX
subject=/C=BR/ST=RJ/L=NITEROI/O=ICP-Brasil/OU=Secretaria da Receita Federal do Brasil - RFB/OU=ARBRCERTIFICADOS/OU=RFB e-CNPJ A1/CN=MINHA EMPRESA:10570XXXXXXXX
issuer=/C=BR/O=ICP-Brasil/OU=Secretaria da Receita Federal do Brasil - RFB/CN=Autoridade Certificadora SERPRORFBv4


Se tiver um tempinho acesse esse site do SERPRO com um certificado Valido que vai te mostrar as OIDs que estou falando:
http://repositorio.serpro.gov.br/testeaqui/

Quem sabe vc consegui me dar uma luz.

Valeu

Edi Gomes

unread,
Sep 7, 2016, 10:18:45 PM9/7/16
to NFePHP
Explica bem o que você quer fazer!

Não deu pra entender nada!!!

Roberto Machado

unread,
Sep 8, 2016, 12:37:00 PM9/8/16
to nfe...@googlegroups.com
Para extrair os dados de um determinado OID de um certificado digital você pode usar a classe ASN que eu deixei no repositório 

Veja que no caso eu usei apenas o OID do CNPJ na função getCNPJ(), mas você pode extrair qualquer OID existente ... 

Para entender melhor pode usar esse outro repositório fgrosse/PHPASN1  o Sr. Friedrich Große é muito atencioso e me ajudou bastante.

Roberto        





Edilson Cichon - OnSystem Software House

unread,
Sep 8, 2016, 12:58:05 PM9/8/16
to nfe...@googlegroups.com
Daniel, recentemente estou fazendo isso, porém, com JAVA, mas acredito que lhe dê um caminho.
Seguem link que usei como base:
http://www.javac.com.br/jc/posts/list/538-recuperando-informacoes-do-certificado-digital-cnpj-nome-do-responsavel-etc.page

Atenciosamente,
Edilson Cichon

--
--
Você recebeu esta mensagem porque está inscrito no Grupo "NFePHP".
Para Postar: nfe...@googlegroups.com
Para Sair do Grupo: nfephp+un...@googlegroups.com
Link: http://groups.google.com.br/group/nfephp?hl=pt-BR
-------
Repositório: https://github.com/nfephp-org/nfephp
---
Você recebeu essa mensagem porque está inscrito no grupo "NFePHP" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para nfephp+un...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Daniel Pitta

unread,
Sep 10, 2016, 10:50:06 AM9/10/16
to NFePHP
Roberto Obrigado pela Ajuda como sempre você é muito atencioso.

Você sabe como incluir um OID no Certificado??




Em terça-feira, 6 de setembro de 2016 10:29:41 UTC-3, Daniel Pitta escreveu:

Roberto Machado

unread,
Sep 10, 2016, 3:00:56 PM9/10/16
to nfe...@googlegroups.com
Essa classe do "Her Frederich Grosse" serve para algo assim, ela estrutura os dados para serem inclusos, mas isso é algo que nunca tentei. 

Eu uso certificados auto-assinados muito raramente e para propósitos internos nos meus clientes e nunca tentei nada assim antes.

Roberto

Rubens Nogueira

unread,
Sep 16, 2016, 3:41:30 PM9/16/16
to NFePHP
Daniel,

até onde entendo, você quer criar "artificialmente" um certificado válido. Vou te responder com base no pouco que sei, pois tive que criar certificados SSL para websites e utilizei a ferramenta OpenSSL para isso.

O caminho é mesmo através do comando "openssl x509": https://www.openssl.org/docs/manmaster/apps/x509.html

Porém:

1) você vai ter que debulhar a documentação para descobrir como incluir os tais campos que faltam

2) esses campos extras (ou alguns deles) foram adicionados pela Autoridade Certificadora (CA), ou seja, pela empresa emissora do certificado, que é a única com autoridade para isso

3) como consequência do item 2 acima, você não conseguirá incluir dados ao seu bel prazer no certificado e ainda assim fazê-lo funcionar, pois a CA vai detectar que o certificado está corrompido - a CA será consultada pelos sistemas que receberem o seu certificado e ambos saberão que seu certificado é um impostor

4) quando muito, você conseguirá incluir todas as informações originais de um certificado preexistente, sem sobrar nem faltar nenhum, e assim obter simplesmente um "clone" do original - se você já tem um certificado válido em formato PFX, nada disso faz sentido


Caso eu tenha escrito alguma besteira, por favor alguém corrija. Ainda não tive tempo para estudar a fundo o funcionamento de certificados.
Reply all
Reply to author
Forward
0 new messages