Bom dia. Tudo bem!
Eu já passei com algo parecido, com um sistema feito para baixar os XMLs, de CT-e, e NF-e, de um cliente, feito na linguagem GO...
E aí descobri que o problema não estava no certificado digital, e nem no programa em GO, mas que no site do Governo, de uma certificadora, para certificar o seu certificado, não estava aceitando a versão que estava, nem tão pouco a última, mas sim a penúltima versão funcionava...
Também descobri depois do nada de parar do nada...
Uma vez, atualizei tirando essa certificadora, funcionou, depois parou novamente...
E aí descobri que têm sim, que colocar a certificado, e somente a penúltima funcionava, das mais de 150 certificadoras, e atualizações, e somente uma funcionava...
Ninguém documenta essa negócio direito. Enfim, funciona, funcionou, e está funcionando até agora e nunca mais parou...
E fiz uma outra ação com certificado também no Ambiente windows que ficava o certificado, eu instalei novamente, de 02 formas...
Por precaução, por que pediram também..
01 - Instalar novamente no servidor na máquina, onde está a sua aplicação PHP (igualmente a minha em GO), e a segunda vez na instalação...
02 - Escolhe agora uma nova instalação na mesma máquina, no mesmo servidor, o mesmo certificado, mudando ali na segunda ou terceira tela da instalação, colocando em repositório colocando, e escolhendo a pasta de Certificados em Raíz/Pasta confiáveis...
Depois disso coloque ai no seu programa PHP, essa questão de ter a certificadora para validar o seu certificado... E irá funcionar...
Site da Autoridade Certificadora Raiz (AC-Raiz):
https://www.gov.br/iti/pt-br/assuntos/icp-brasilBaixado uma nova versão do certificado da certificadora -
https://www.gov.br/iti/pt-br/assuntos/repositorio/repositorio-ac-raizSomente esse que funcionou:
ICP-Brasilv12.pem", "Arquivo PEM com CA/bundle ICP-Brasil")
Não colocar se não trava.. Isso em GO:
t := &http.Transport{
TLSClientConfig: &tls.Config{
Renegotiation: tls.RenegotiateOnceAsClient,
Certificates: []tls.Certificate{cert},
RootCAs: caCertPool,
MaxVersion: tls.VersionTLS12,
//InsecureSkipVerify: true, // Ignora verificação de certificado Não utilizar.. Primeira vez que eu alterei... A segunda eu coloquei para utilizar a certificadora, e essa linha eu comente.
},
}
É isso.
Att.,
Cristiano Amaral