Ler certificado diretamente de um pfx

Projeto hbNFe (Nota Fiscal Eletronica/Danfe) para [x]Harbour

Moderador: Moderadores

malcarli
Usuário Nível 3
Usuário Nível 3
Mensagens: 239
Registrado em: 20 Ago 2015 18:14
Localização: marilia/sp

Ler certificado diretamente de um pfx

Mensagem por malcarli »

Bom dia Devs,

Existe alguma método ou função para ler diretamente de um certificado digital, sem estar instalado no windows?

algo assim:

Código: Selecionar todos


     oSefaz:CarregarCertificadoDigitalA1("D:\tools\nomedocertificao.pfx","1234")	  



Pois tenho clientes, que no server as vezes ele "perde a instalação" do certificado


Att.

Marcelo A. L. Carli
Marília/SP
Capital Nacional do Alimento ®
https://malc-informatica.ueniweb.com
Insta: @malcarli25
Email / Skype: marceloalcarli@gmail.com
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ler certificado diretamente de um pfx

Mensagem por JoséQuintas »

Na sefazclass tem função.
Pra ler pfx, pra instalar pfx, pra remover, etc.
Veja no arquivo capicom.

Não esqueça que tem contador que exporta na criptografia máxima.
Isso não funciona em qualquer computador.
Em windows server então.... nem pensar.
Isso depende de DLL, e o server bloqueia a DLL.

Um usuário instalar certificado no próprio usuário é normal, não tem proteção que impeça isso.
O programa mesmo pode instalar.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
malcarli
Usuário Nível 3
Usuário Nível 3
Mensagens: 239
Registrado em: 20 Ago 2015 18:14
Localização: marilia/sp

Ler certificado diretamente de um pfx

Mensagem por malcarli »

Bom dia, Mestre,

Desculpa a ignorância, procurei e não achei por isto postei a dúvida.

Se puder mostrar expecificamente onde está agradeço

obg

Att.

Marcelo A. L. Carli
Marília/SP
Capital Nacional do Alimento ®
https://malc-informatica.ueniweb.com
Insta: @malcarli25
Email / Skype: marceloalcarli@gmail.com
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ler certificado diretamente de um pfx

Mensagem por JoséQuintas »

capicom.png
O único arquivo que trata capicom, e leva o nome capicom.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
malcarli
Usuário Nível 3
Usuário Nível 3
Mensagens: 239
Registrado em: 20 Ago 2015 18:14
Localização: marilia/sp

Ler certificado diretamente de um pfx

Mensagem por malcarli »

Bom dia Mestre, parabéns e muitos anos de vida. Precisava ler um .pfx e não remover

achei este código mas não consegui transformar em harbour

Código: Selecionar todos


' --- Configuração ---
Const CAPICOM_CURRENT_USER_STORE = 2
Const CAPICOM_MY_STORE = "MY"
Const CAPICOM_STORE_OPEN_READ_ONLY = 0

' --- Variáveis ---
Dim objStore
Dim objCert
Dim objPfx
Dim strPfxPath
Dim strPfxPassword

' --- Definir caminho do arquivo PFX e senha ---
strPfxPath = "c:\caminho\para\seu\arquivo.pfx" ' Substitua pelo caminho real do seu arquivo
strPfxPassword = "sua_senha" ' Substitua pela senha do seu arquivo PFX

' --- Criar objeto CAPICOM.Store ---
Set objStore = CreateObject("CAPICOM.Store")

' --- Abrir o armazenamento de certificados ---
objStore.Open CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_READ_ONLY

' --- Carregar o certificado do arquivo PFX ---
Set objPfx = CreateObject("CAPICOM.PFX")

' --- Tentar carregar o arquivo PFX.  A função de carregamento retorna TRUE em caso de sucesso e FALSE em caso de falha ---
If objPfx.Load(strPfxPath, strPfxPassword) Then

    ' --- Obter o certificado da estrutura PFX ---
    Set objCert = objPfx.Certificates.Item(1)

    ' --- Exibir informações do certificado (apenas um exemplo) ---
    WScript.Echo "Assunto: " & objCert.SubjectName
    WScript.Echo "Emissor: " & objCert.IssuerName
    WScript.Echo "Validade: " & objCert.ValidFromDate & " - " & objCert.ValidUntilDate

    ' --- Aqui você pode usar o certificado e a chave privada para outras operações ---
    ' Por exemplo, você pode acessar a chave privada:
    ' Set objPrivateKey = objCert.PrivateKey
    ' WScript.Echo "Chave Privada: " & objPrivateKey.KeySize

    ' --- Limpar objetos ---
    Set objCert = Nothing
    Set objPfx = Nothing
Else
    WScript.Echo "Erro ao carregar o arquivo PFX: " & objPfx.LastError
End If

' --- Fechar o armazenamento ---
objStore.Close

' --- Limpar objeto ---
Set objStore = Nothing

WScript.Echo "Fim."
Consegui, Mestre, se quiser incorporar na classe, pode usar sem moderação.

Código: Selecionar todos

#include "minigui.ch"

PROCEDURE Main()
   LOCAL objStore
   LOCAL strPfxPath := "D:\enzza\classe_nfse\nome_do_seu_certificado.pfx"
   LOCAL strPfxPassword := "1234"

   Set Century on
   Set date Briti

   // Criar objeto CAPICOM.Store
   objStore := win_oleCreateObject( "CAPICOM.Certificate" )
   objStore:Load( strPfxPath, strPfxPassword, 0, 0 )

   msginfo( "Assunto: " + objStore:SubjectName)
   msginfo( "Emissor: " + objStore:IssuerName)
   msginfo( "Validade: " + Dtoc(objStore:ValidFromDate) + " até " + Dtoc(objStore:ValidToDate))
   msginfo( "Thumbprint: " + objStore:Thumbprint)
   msginfo( "Serial number: " + objStore:SerialNumber)
   msginfo( "Versão: " + Hb_Ntos(objStore:Version))
   msginfo( "Instalado ?: " + Iif(objStore:Archived, [SIM], [NÃO]) )

   objStore := NIL

   msginfo( "Fim.")

RETURN (Nil)


obg

Att.

Marcelo A. L. Carli
Marília/SP
Capital Nacional do Alimento ®
https://malc-informatica.ueniweb.com
Insta: @malcarli25
Email / Skype: marceloalcarli@gmail.com
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ler certificado diretamente de um pfx

Mensagem por JoséQuintas »

O último parâmetro, teoricamente não é instalado, já que não está fazendo nenhum teste sobre isso.
Talvez "arquivado" seja que perdeu a validade, foi arquivado porque não dá mais pra usar.

Na capicom tem isso já.
Se não me engano, na época foi o Kapiaba que precisava disso, há varios anos.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder