Requisitar chave do certificado

Discussion in 'Portuguese Forum' started by Raphael da Costa Peret, Sep 18, 2018.

  1. Olá a todos.

    Preciso selecionar um certificado digital instalado no Windows e gravar essa chave em uma tabela do banco de dados.

    certificado.png

    Já pesquisei bastante e não consegui encontrar como faço isso no B4J. Ou, encontrei e não entendi. :D

    Alguém pode dar uma ajuda nessa questão?
     
  2. Claudio Oliveira

    Claudio Oliveira Active Member Licensed User

    Raphael,
    Use o WindowsPowerShell
    Você precisa referenciar a library jSHell

    Code:
    Sub GravaArqCertificados(CaminhoArquivo as String, NomeArquivo as String)
        
    Dim SH as Shell
        sh.Initialize(
    "SH""C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe",  Array As String($"get-childitem -Recurs -path cert:\CurrentUser\My | format-list -property * > ${NomeArquivo}"$))
        sh.WorkingDirectory = CaminhoArquivo
        sh.Run(
    10000)
        StartMessageLoop
    End Sub
    .
    .
    .
    Sub SH_ProcessCompleted (Success As Boolean, ExitCode As Int, StdOut As String, StdErr As String)
       
    If Success And ExitCode = 0 Then
         
    Log("Success")
         
    Log(StdOut)
       
    Else
         
    Log("Error: " & StdErr)
       
    End If
    End Sub
    Exemplo de Utilização:
    Code:
    GravaArqCertificados(File.DirApp, "certificados.txt")
    Se tudo der certo (aqui no meu teste funcionou TOTAL!), no diretório especificado haverá um arquivo texto de nome especificado contendo todas as informações dos certificados em "Usuário Atual\Pessoal\Certificados", EXCETO a chave pública e muito menos a chave privativa.
    A partir daí, é ler o arquivo e interpretar os dados nele contidos. Você vai perder uns 10 minutos estudando esses dados.
    Talvez seja preciso acertar o caminho do PowerShell na sua máquina, mas isso é galho fraco.

    O código acima com toda certeza pode e DEVE ser melhorado e enriquecido. Foi escrito às pressas e sem muito cuidado, apenas pra demonstrar o processo.

    A alternativa é criar uma DLL em "C" pra acessar a CryptoAPI do Windows, e um programa em Java usando JNI pra acessar essa DLL em "C", uma vez que Java não tem como acessar nativamente componentes COM e ActiveX do Windows, ou seja: esquece isso! :D

    Espero ter ajudado.

    Boa sorte! ;)
     

  3. Cláudio, muito obrigado.
    Testei aqui e funcionou exatamente como você disse. :)

    Inicialmente eu ia usar JNI e C++ mas o pessoal aqui da empresa tem um certo preconceito com elas. :D
     
    Claudio Oliveira likes this.
  4. Claudio Oliveira

    Claudio Oliveira Active Member Licensed User

    Hehehehehe
    Confesso que eu também tenho esse certo preconceito aí... Principalmente porque eu nunca fui "fera" em C, e sempre achei que deveria ser utilizada apenas naquelas aplicações que nenhuma outra linguagem poderia resolver, geralmente aplicações relacionadas a acessos de baixíssimo nível ao S.O. ou ao próprio hardware. Ou então em aplicações onde o desempenho e a temporização são extremamente críticos, como sistemas de monitoramento e aquisição de dados de sensores, tipo os de temperatura de caldeiras, por exemplo.

    Bom, de qualquer forma,que bom que essa solução funcionou aí também! :)

    Abraço!
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice