Seleciona um Certificado Digital com xHarbour

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Seleciona um Certificado Digital com xHarbour

Mensagem por sygecom »

Exemplo de uso.:

Código: Selecionar todos

FUNCTION MAIN()
Local aVetor := {}
aVetor:=PEGA_CERTIFICADO()
IF LEN(aVetor) > 0
   ALERT("Numero de Serie do certificado.:" + aVetor[1,1] + " - Vencimento.: " + DTOC(aVetor[1,2]))
ENDIF
RETURN
Codigo.:

Código: Selecionar todos

********************************
STATIC FUNCTION PEGA_CERTIFICADO
*Retorna um Vetor com o numero de serie na primeira possição
*e o vencimento do certificado na segunda possição
*Leonardo Machado - 03/05/2010
********************************
Local oCerts1, oCerts2, oCerts3, oStore, oCertificates, aVETOR:={}

TRY
   oCertificates := GetActiveObject( "CAPICOM.Certificates" )
CATCH
   TRY
      oCertificates := CreateObject( "CAPICOM.Certificates" )
   CATCH
      alert("A Dll (capicom.dll) Não está registrada, Favor executar o arquivo INSTALL.BAT")
      //myrun("install.bat")
      Return(aVETOR)
   END
END
TRY
   oStore = GetActiveObject("CAPICOM.Store")
CATCH
   TRY
      oStore := CreateObject( "CAPICOM.Store")
   CATCH
      alert("A Dll (capicom.dll) Não está registrada, Favor executar o arquivo INSTALL.BAT")
      //myrun("install.bat")
      Return(aVETOR)
   END
END

TRY
  oStore:open(2,'My',2)
  oCerts1:=oStore:Certificates()
  oCerts2:=oCerts1:Select("Selecione o certificado para uso da Nfe","Selecione o certificado",.F.)
  IF oCerts2:Count() > 0
     oCerts3 := oCerts2:Item(1)
     AADD(aVETOR,{oCerts3:SerialNumber,oCerts3:ValidToDate})
  ENDIF
CATCH
   Return(aVETOR)
END
Return(aVETOR)
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
carlos_dornelas
Usuário Nível 3
Usuário Nível 3
Mensagens: 400
Registrado em: 25 Ago 2004 21:54

Re: Seleciona um Certificado Digital com xHarbour

Mensagem por carlos_dornelas »

Leonardo, esse TRY e CATCH, para que servem mesmo? É mais ou menos como o IF e ELSE?

Desculpe a pergunta básica...

Antonio Carlos
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Seleciona um Certificado Digital com xHarbour

Mensagem por sygecom »

Olá Carlos,
O TRY e CATCH faz o mesmo trabalho do BEGIN SEQUENCE do antigo CLIPPER, com ele podemos interceptar erros em tempo de execução, veja abaixo o que o TRY e CATCH no Harbour faz:

Código: Selecionar todos

   /* TRY / CATCH / FINALLY / END */
   #xcommand TRY  => BEGIN SEQUENCE WITH {|oErr| Break( oErr )}
   #xcommand CATCH [<!oErr!>] => RECOVER [USING <oErr>] <-oErr->
   #xcommand FINALLY => ALWAYS
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
carlos_dornelas
Usuário Nível 3
Usuário Nível 3
Mensagens: 400
Registrado em: 25 Ago 2004 21:54

Re: Seleciona um Certificado Digital com xHarbour

Mensagem por carlos_dornelas »

Aprendi mais uma... Grato!
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: Seleciona um Certificado Digital com xHarbour

Mensagem por rochinha »

Amiguinho,

SygeCOM,

Seria possivel voce apresentar um exemplo básico de uso de sua função e quais valores são retornados por ele?

Obrigado.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Seleciona um Certificado Digital com xHarbour

Mensagem por sygecom »

Vou providenciar um exemplo, e ela retorna um VETOR com o numero de série do certificado digital e a data de validade, mas da para pegar mais informações como o CNPJ, Razão social e etc...
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Seleciona um Certificado Digital com xHarbour

Mensagem por sygecom »

Rochinha, desculpa a demora, está no primeiro post o exemplo e o que retorna.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: Seleciona um Certificado Digital com xHarbour

Mensagem por rochinha »

Amiguinho,

Valeu agora eu posso configurar automaticamente o Monitor de forma transparente.

Mas deixo aqui um adicional para melhorar o registro da CAPICOM.DLL

Basta adicionar este trecho ao final do .PRG:

Código: Selecionar todos

#pragma BEGINDUMP
        #include <hbapi.h>
        #include <windows.h>
        typedef LONG ( * PDLLREGISTERSERVER ) ( void );
        HB_FUNC( REGISTERSERVER )
        {
           HMODULE hDll = LoadLibrary( hb_parc( 1 ) );
           LONG lReturn = 0;
           if( hDll )
           {
              FARPROC pRegisterServer = GetProcAddress( hDll, "DllRegisterServer" );
              if( pRegisterServer )
                 lReturn = ( ( PDLLREGISTERSERVER ) pRegisterServer )();
              FreeLibrary( hDll );
           }
           hb_retnl( lReturn );
        }        
#pragma ENDDUMP
E alterar os trechos abaixo do CATCH como mostrado:

Código: Selecionar todos

...
   CATCH
      // Ajuda a instalar automaticamente a capicom.dll
      iif( file( "CAPICOM.DLL" ), RegisterServer( "CAPICOM.DLL" ), MsgStop( "Nao foi instalado CAPICOM.DLL" ) )
      //myrun("install.bat")
...
   CATCH
      // Ajuda a instalar automaticamente a capicom.dll
      iif( file( "CAPICOM.DLL" ), RegisterServer( "CAPICOM.DLL" ), MsgStop( "Nao foi instalado CAPICOM.DLL" ) )
      //myrun("install.bat")
      Return(aVETOR)
   END
END
Acho que ai fica redondo!
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Seleciona um Certificado Digital com xHarbour

Mensagem por sygecom »

Olá Rochina,
Eu até estava usando esse modo automático de registrar as DLL o problema se da em Windows 7 que precisa ter permissão para registrar isso, nesse caso não consegui deixar pelo meu sistema, será que existe algum modo de contornar isso sem ter que pedir para o usuário desabilitar a tal segurança do Windows 7 ?
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: Seleciona um Certificado Digital com xHarbour

Mensagem por rochinha »

Amiguinho,

Para transpor a segurança e atributos de arquivos e pastas no Windows 2003 Server eu uso o CACLS:

cacls <alvo> /G <usuario>:F

Exemplo:

cacls arquivo.exe /G Administrador:F

Uma vez executado o comando é necessário executar o arquivo.exe e verificar se ele consegue burlar as seguranças.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: Seleciona um Certificado Digital com xHarbour

Mensagem por rochinha »

Amiguinho,

Tente o seguinte:

Código: Selecionar todos

...
   CATCH
      // Ajuda a instalar automaticamente a capicom.dll
      UAC( 0 )
      iif( file( "CAPICOM.DLL" ), RegisterServer( "CAPICOM.DLL" ), MsgStop( "Nao foi instalado CAPICOM.DLL" ) )
      UAC( 1 )
      //myrun("install.bat")
...
   CATCH
      // Ajuda a instalar automaticamente a capicom.dll
      UAC( 0 )
      iif( file( "CAPICOM.DLL" ), RegisterServer( "CAPICOM.DLL" ), MsgStop( "Nao foi instalado CAPICOM.DLL" ) )
      UAC( 1 )
      //myrun("install.bat")
      Return(aVETOR)
   END
END

FUNCTION UAC(nAtivar)
   *****************************************************
   * Grava o registro do aplicativo 
   *****************************************************
   LOCAL cRunName, cRunKey, cRegKey
   // EnableLUA
   // 0-Desativar
   // 1-Ativar
   cRegValue:= nAtivar
   cRegKey  := "Software\Microsoft\Windows\CurrentVersion\Policies\System"
   cRegRoot := HKEY_LOCAL_MACHINE
   SETREGVAR( cRegRoot, cRegKey, "EnableLUA", cRegValue )
   RETURN 0

FUNCTION SETREGVAR(nKey, cRegKey, cSubKey, uValue)
   LOCAL oReg, cValue
   nKey := IF(nKey == NIL, HKEY_CURRENT_USER, nKey)
   uValue := IF(uValue == NIL, "", uValue)
   oReg := TReg32():Create(nKey, cRegKey)
   cValue := oReg:Set(cSubKey, uValue)
   oReg:Close()
   RETURN cValue
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Seleciona um Certificado Digital com xHarbour

Mensagem por sygecom »

Grande, estou viajando no momento, mas quando eu chegar em casa vou testar. Mais uma vez muito obrigado por compartilhar com nós sua valioso experiência.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
nilton579
Usuário Nível 1
Usuário Nível 1
Mensagens: 31
Registrado em: 05 Fev 2008 20:23
Localização: MANAUS
Contato:

Re: Seleciona um Certificado Digital com xHarbour

Mensagem por nilton579 »

Alguém já conseguiu construir uma rotina para assinar um documento com base em um certificado digital? Se tiver, dá uma forcinha aí postando o código...
Clenilton Alencar
Minigui Extended 18.06 -> 19.04
BRMake 2.05
Borland C++
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Seleciona um Certificado Digital com xHarbour

Mensagem por sygecom »

Olá Clenilton,
Abra um novo tópico para sua duvida.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Ladinilson Sousa
Usuário Nível 1
Usuário Nível 1
Mensagens: 35
Registrado em: 09 Fev 2015 11:41
Localização: Belém/PA

Seleciona um Certificado Digital com xHarbour

Mensagem por Ladinilson Sousa »

SYGECOM tem como pegar o nome da empresa e o cnpj nos vetores como o senhor pegou o número de serie e data de vencimento?

Obrigado
Responder