Notamos vários relatos, de usuários que não estavam conseguindo carregar alguns certificados, usando a versão 3.x.x do OpenSSL, e sendo que esse mesmo certificado, é carregado normalmente, na versão 1.1.x do OpenSSL
Ocorre que a versão 3.x do OpenSSL, tornou "legado" algumas rotinas de criptografia...
E provavelmente os certificados que causavam erro, estavam usando essas rotinas legadas...
Esse link nos ajudou com a solução que aplicamos nos fontes do ACBr, e dá mais detalhes sobre o problema:
https://github.com/openssl/openssl/issues/19368
A modificação que aplicamos depende que o OpenSSL consiga carregar a biblioteca "legacy", portanto a mesma deve estar na mesma pasta das demais...
Você pode ver as modificações, nesse histórico de Commit [r31480]
Essa biblioteca "legacy.dll" agora é distribuída na pasta: ACBr\DLLs\OpenSSL\3.1.3\x64
Observe que não encontramos uma distribuição do OpenSSL, que tenha a "legacy.dll" para 32 bits... portanto, a carga dessa DLL, no Windows, só irá funcionar, se você estiver compilando o seu executável em 64 bits...
Abaixo estão algumas dicas, se você estiver com problemas ao ler o Certificado, usando OpenSSL 3
Verifique se a biblioteca "legacy" está na mesma pasta das demais DLLs do OpenSSL 3
- Lembrando que conforme explicamos acima, ela está disponível, apenas para 64 bits
- A pasta com todas as DLLs ficaria algo como: "libcrypto-3-x64.dll, libssl-3-x64.dll, legacy.dll"
- Você não conseguirá usar as bibliotecas de 64 bits, se estiver compilando a sua aplicação em 32 bits
Instale o certificado no Windows, e Exporte ele novamente
Isso fará com que o Windows reescreva o certificado, utilizando rotinas de criptografia mais modernas, e com isso, permitindo o uso dele no OpenSSL 3.x
Volte para versão 1.1.x.x do OpenSSL...
Essa versão da biblioteca OpenSSL provavelmente continuará sendo utilizada, por muitos e muitos anos