PC SOFT
DEPOT EN LIGNE
POUR WINDEVWEBDEV ET WINDEV MOBILE

[DLL Unimake.DFe] Como manipular certificados digitais A1 ou A3 com a DLL Unimake.DFe no WINDEV.
Publié par Wandrey
dans la catégorie Divers
Nouveautés



Description
No 7º episódio do Wandrey Descomplica sobre a DLL Unimake.DFe, aprendemos:

- Como utilizar certificados instalados no windows através do Serial Number ou Thumbprint;
- Como utilizar certificados A1 sem instalar no windows, direto do arquivo .PFX;
- Como guardar o certificado A1 em banco de dados e fazer uso a partir do conteúdo da tabela, sem instalar no windows;
- Como utilizar certificados A3;
- Como salvar o PIN do certificado A3 para que o usuário não precise digitar;
- E dicas diversas sobre certificado digital no ERP/PDF.

A seguir, apresento o código em WINDEV para realizar as tarefas descritas acima.

```
EDT_RetornoWSString = ""

oCertificadoDigital is Unimake.Security.Platform.CertificadoDigital

//Certificado A1 - Testar a senha do arquivo .PFX do certificado A1, se não estiver correto vai gerar uma exceção
WHEN EXCEPTION IN
oCertificadoDigital.CarregarCertificadoDigitalA1("c:\projetos\unimakepv.pfx","12345678")

EDT_RetornoWSString += "Senha certificado digital A1 está correta!!!" + CR + CR
DO
EDT_RetornoWSString += "Senha certificado digital A1 está incorreta!!" + CR + CR
END

WHEN EXCEPTION IN
//Certificado A1 - Carregar o certificado digital direto do arquivo .PFX.
oCertificadoSelecionado is System.Security.Cryptography.X509Certificates.X509Certificate2 <- oCertificadoDigital.CarregarCertificadoDigitalA1("c:\projetos\certificados\UnimakePV.pfx", "12345678")

EDT_RetornoWSString += "ID do Certificado" + CR + oCertificadoDigital.GetThumbprint(oCertificadoSelecionado) + CR + CR
EDT_RetornoWSString += "Dados do proprietario" + CR + oCertificadoDigital.GetSubject(oCertificadoSelecionado) + CR + CR
EDT_RetornoWSString += "Numero de Serie" + CR + oCertificadoDigital.GetSerialNumber(oCertificadoSelecionado) + CR + CR
EDT_RetornoWSString += "Validade Inicial" + CR + oCertificadoDigital.GetNotBefore(oCertificadoSelecionado) + CR + CR
EDT_RetornoWSString += "Validade Final" + CR + oCertificadoDigital.GetNotAfter(oCertificadoSelecionado) + CR + CR

IF oCertificadoDigital.Vencido(oCertificadoSelecionado) THEN
EDT_RetornoWSString += "Certificado vencido?" + CR + "SIM" + CR + CR
ELSE
EDT_RetornoWSString += "Certificado vencido?" + CR + "NÃO" + CR + CR
END

//Resgatar o thumbPrint e Serial Number, servem como ID para regatar o certificado digital, quando instalado no windows.
thumbPrint is string = oCertificadoDigital.GetThumbprint(oCertificadoSelecionado)
serialNumber is string = oCertificadoDigital.GetSerialNumber(oCertificadoSelecionado)

EDT_RetornoWSString += "ThumbPrint " + CR + thumbPrint + CR + CR
EDT_RetornoWSString += "Serial Number " + CR + serialNumber + CR + CR

//Carregar um certificado digital instalado no windows pelo Serial Number
oCertificadoSelecionado2 is System.Security.Cryptography.X509Certificates.X509Certificate2 <- oCertificadoDigital.BuscarCertificadoDigital(serialNumber)

EDT_RetornoWSString += "Carregar pelo Serial Number " + CR + serialNumber + CR + oCertificadoDigital.GetSerialNumber(oCertificadoSelecionado2) + CR + CR

//Carregar um certificado digital instalado no windows pelo Serial Number
oCertificadoSelecionado3 is System.Security.Cryptography.X509Certificates.X509Certificate2 <- oCertificadoDigital.BuscarCertificadoDigital(thumbPrint)

EDT_RetornoWSString += "Carregar pelo ThumbPrint " + CR + thumbPrint + CR + oCertificadoDigital.GetThumbprint(oCertificadoSelecionado3) + CR + CR

//Criando um BASE64 para gravar o certificado digital A1 no banco (visando maior segurança) para resgatar no momento do uso
certificadoBase64 is string = oCertificadoDigital.ToBase64("c:\projetos\certificados\UnimakePV.pfx")

EDT_RetornoWSString += "Base64" + CR + certificadoBase64 + CR + CR

//Carregar um certificado partindo de um BASE64
oCertificadoSelecionado4 is System.Security.Cryptography.X509Certificates.X509Certificate2 <- oCertificadoDigital.FromBase64(certificadoBase64,"12345678")

EDT_RetornoWSString += "ThumbPrint do certificado carregado do Base64" + CR + oCertificadoDigital.GetThumbprint(oCertificadoSelecionado4) + CR + CR

//Carregar certificado digital instalado no windows A1 ou A3
oCertificadoSelecionado5 is System.Security.Cryptography.X509Certificates.X509Certificate2 <- oCertificadoDigital.AbrirTelaSelecao()
EDT_RetornoWSString += "ThumbPrint do certificado instalado no windows" + CR + oCertificadoDigital.GetThumbprint(oCertificadoSelecionado5) + CR + CR

//Setar o PIN do certificado A3 para não precisar ficar digitando
EDT_RetornoWSString += "Testar se é certificado A3:" + CR
oUtilCert is Unimake.Business.DFe.Security.ClsX509Certificate2ExtensionInterop
IF oUtilCert.IsA3(oCertificadoSelecionado5) THEN
EDT_RetornoWSString += "É A3!!!" + CR + CR

//Setar o PIN no Certificado A3 Selecionado
oUtilCert.SetPinPrivateKey(oCertificadoSelecionado5, "123456")
ELSE
EDT_RetornoWSString += "Não é A3!!!" + CR + CR
END
DO
Info(ExceptionInfo(errMessage)) //Ele também pega o conteúdo da Exception do lado do C#, importante envolver o código em Try/Catch
END

```

Para uma explicação mais detalhada do conteúdo deste post, confira o vídeo no seguinte link:
https://www.youtube.com/watch?v=G1uYZu6BzAk
Illustrations, copies d'écran
none
none
Avis des utilisateurs
(Pour noter la ressource, cliquez sur Ecrire un avis)
Aucun avis ou commentaire ? Soyez le premier !