Ir para conteúdo
  • Cadastre-se

dev botao

Recommended Posts

  • Membros Pro
Postado

Bom dia Pessol, queria uma ajuda de voces....

Estou fazendo uma aplicação, e estou fazendo com que o usuario escolha seu certificaod, mas parei nessa parte, pois nao sei como posso continuar, eu preciso enviar isso por http, mas nao achei como ainda....image.thumb.png.5b2a6f9245aa8c52b8c44a9adea422d4.png

  • Moderadores
Postado
11 minutos atrás, Vitor Domingos disse:

Bom dia Pessol, queria uma ajuda de voces....

Estou fazendo uma aplicação, e estou fazendo com que o usuario escolha seu certificaod, mas parei nessa parte, pois nao sei como posso continuar, eu preciso enviar isso por http, mas nao achei como ainda....image.thumb.png.5b2a6f9245aa8c52b8c44a9adea422d4.png

Bom se está trabalhando com API seu cliente só pode usar certificado A1.

tu vai ter que ter opção para ele upar para sua API o pfx e tu guardar ele em um binario

depois tu carregar ele como arquivo e não mais como numero de serie conforme sua imagem

 

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

  • Membros Pro
Postado (editado)
7 minutos atrás, Juliomar Marchetti disse:

Bom se está trabalhando com API seu cliente só pode usar certificado A1.

tu vai ter que ter opção para ele upar para sua API o pfx e tu guardar ele em um binario

depois tu carregar ele como arquivo e não mais como numero de serie conforme sua imagem

 

Certo, mas acho que me expressei errado, quando o cliente abrir a aplicação, abre aquela tela do windows para selecionar o certificado, Certo? E depois disso, o que eu faço com a informação, pois eu preciso enviar o certificado por http, mas eu nao queria que o cliente apontasse o diretorio do pfx, mas sim aquela tela de do windows para escolher o certificado, Agradeço ja pela ajuda!!

Editado por Vitor Domingos
  • Moderadores
Postado
2 minutos atrás, Vitor Domingos disse:

Certo, mas acho que me expressei errado, quando o cliente abrir a aplicação, abre aquela tela do windows para selecionar o certificado, Certo? E depois disso, o que eu faço com a informação, pois eu preciso enviar o certificado por http, mas eu nao queria que o cliente apontasse o diretorio do pfx, mas sim aquela tela de do windows para escolher o certificado, Agradeço ja pela ajuda!!

no caso essa tela que tu fala não deve mais existir se é uma API.

tu tem que ter algo para ele configurar o certificado no sistema e nesse caso subir via upload o certificado pfx para salvar no banco

e quando ele passar a emissão ou uso do certificado tu vai ler ele diretamente do banco passando ao componente

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

  • Membros Pro
Postado (editado)
20 minutos atrás, Juliomar Marchetti disse:

no caso essa tela que tu fala não deve mais existir se é uma API.

tu tem que ter algo para ele configurar o certificado no sistema e nesse caso subir via upload o certificado pfx para salvar no banco

e quando ele passar a emissão ou uso do certificado tu vai ler ele diretamente do banco passando ao componente

É que essa aplicação vai enviar esse certificado junto com outras informações para imitir uma NFCom, o servidor que vai receber essa requisição, ja esta tudo certo. Mas eu quero facilitar para o cliente ter que ir la e direcionar o certificado, ou ate ficar alternando entre dois certificado, por isso falei daquela tela do windows, essa tela: image.png.8b14f47653af8483c2ae5f2d0c553d24.png

 

Dai o cliente selecionar qual certificado ele quer, e com isso o meu codigo pega o certificado selecionado e enviar: image.png.510cab0c5e008735dbcc8a51163e8d83.png, nai sei se agora ficou mais claro

Editado por Vitor Domingos
  • Moderadores
Postado
1 minuto atrás, Vitor Domingos disse:

É que essa aplicação vai enviar esse certificado junto com outras informações para imitir uma NFCom, o servidor que vai receber essa requisição, ja esta tudo certo. Mas eu quero facilitar para o cliente ter que ir la e direcionar o certificado, ou ate ficar alternando entre dois certificado, por isso falei daquela tela do windows, essa tela: image.png.8b14f47653af8483c2ae5f2d0c553d24.png

 

Dai o cliente selecionar qual certificado ele quer, e com isso o meu codigo pega o certificado selecionado e enviar: image.png.510cab0c5e008735dbcc8a51163e8d83.png, nai sei se agora ficou mais claro

mas não será possível tu fazer dessa forma é isso que to lhe explicando. tu não informa o numero de serie tu vai ter que upar de alguma forma o certificado pfx para essa API não existe outra forma diferente

numero serial seria se fosse emissão local pois utiliza de engine do windows

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

  • Membros Pro
Postado
3 minutos atrás, Juliomar Marchetti disse:

mas não será possível tu fazer dessa forma é isso que to lhe explicando. tu não informa o numero de serie tu vai ter que upar de alguma forma o certificado pfx para essa API não existe outra forma diferente

numero serial seria se fosse emissão local pois utiliza de engine do windows

Ahh, Beleza, poderia me citar/direcionar algum código que trata e enviar esse certificado??

  • Moderadores
Postado
21 horas atrás, Vitor Domingos disse:

Ahh, Beleza, poderia me citar/direcionar algum código que trata e enviar esse certificado??

https://www.youtube.com/watch?v=mk7Eahw56ec

exemplo de gravação de certificado no banco

https://www.youtube.com/watch?v=mJMapxEt4zQ

configurar para linux ou android no caso console

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

  • 5 meses depois ...
Postado
Em 11/03/2023 at 18:43, RaphaelComba disse:

Boa noite pessoal não sei se o tópico já foi resolvido, mas apanhei bastante para fazer uma requisição até achar o código que o amigo postou e funciona perfeitamente, para quem estiver com duvida de como funciona essa chamada do certificado via o arquivo .pem eu tive o mesmo problema, pois eu somente possuía o arquivo .pfx, mas felizmente encontrei uma forma de fazer, para os casos onde vocês possuírem apenas o arquivo .pfx é preciso fazer a conversão via OpenSSL com os seguintes comandos:

openssl pkcs12 -in <filename.pfx> -clcerts -nokeys -out certificate.crt

openssl pkcs12 -in <filename.pfx> -nocerts -nodes -out private.key

comandos o parametro <filename.pfx> é o caminho do certificado, após essa conversão vai ser criados os arquivos .crt  e . key e podem ser chamados assim: 

    SSLIOHandler.SSLOptions.CertFile := 'C:\Users\Maquina1\Desktop\Serasa\Cert.crt';
    SSLIOHandler.SSLOptions.KeyFile := 'C:\Users\Maquina1\Desktop\Serasa\Cert.key';

segue o código completo:

var
  HTTPClient: TIdHTTP;
  SSLIOHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
  HTTPClient := TIdHTTP.Create(nil);
  HTTPClient.Request.Clear;
  HTTPClient.Request.CharSet := 'utf-8';
  HTTPClient.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; GTB5; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; Maxthon; InfoPath.1; .NET CLR 3.5.30729; .NET CLR 3.0.30618)';
  HTTPClient.Request.ContentType := 'application/json';
  HTTPClient.Request.CustomHeaders.Clear;
  HTTPClient.Request.CustomHeaders.FoldLines := false;
  HTTPClient.Request.CustomHeaders.Values['Content-Type'] := 'application/json; application/x-www-form-urlencoded;';
  HTTPClient.HandleRedirects := True;
  HTTPClient.HTTPOptions := [hoKeepOrigProtocol, hoInProcessAuth];

  SSLIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  try
    // Set up SSL IO Handler with certificate
    SSLIOHandler.SSLOptions.Mode := sslmClient;
    SSLIOHandler.SSLOptions.VerifyMode := [];
    SSLIOHandler.SSLOptions.VerifyDepth := 0;
    SSLIOHandler.SSLOptions.CertFile := 'C:\Users\Maquina1\Desktop\Serasa\Cert.crt';
    SSLIOHandler.SSLOptions.KeyFile := 'C:\Users\Maquina1\Desktop\Serasa\Cert.key';
    SSLIOHandler.SSLOptions.SSLVersions := [sslvTLSv1_2];

    // Set up HTTP client with SSL IO Handler
    HTTPClient.IOHandler := SSLIOHandler;

    // Make API call
    Result := HTTPClient.Get(APIEndpoint); // APIEndpoint = sua url
  finally
    HTTPClient.Free;
    SSLIOHandler.Free;
  end;
end;

Obs: Faça download do OpenSSL (https://sourceforge.net/projects/openssl/) e execute o arquivo OpenSSL.exe e execute os comando acima.

fontes da conversão do certificado: https://support.kaspersky.com/KSC/12/pt-BR/201428.htm

Um adendo, dependendo da versão do OpenSSL, pode apresentar uma mensagem de erro como a seguir, com um texto explicativo: 

801B5126747F0000:error:0308010C:digital envelope routines:inner_evp_generic_fetch:unsupported:../crypto/evp/evp_fetch.c:349:Global default library context, Algorithm (RC2-40-CBC : 0), Properties (), para entendimento, isso se refere ao seguinte:

Isso informa que o arquivo foi criptografado com um algoritmo de criptografia não suportado (RC2-40-CBC). Esse algoritmo agora é considerado legado e inseguro. O algoritmo ainda está disponível em nosso provedor legado. Por favor, tente adicionar "-legacy" à sua linha de comando.

Para resolver esse erro: adicione a diretiva -legacy aos comandos: 

openssl pkcs12 -in <filename.pfx> -legacy -clcerts -nokeys -out certificate.crt

openssl pkcs12 -in <filename.pfx> -legacy -nocerts -nodes -out private.key

 

Postado
Em 09/12/2022 at 10:19, gkenji disse:

Esse fonte é muito antigo Moysés, não vo lembrar tudo..
Mas passando o olho ai, é o componente do Indy TIdHTTP

Variaveis deve ser isso
HttpClient: TIdHTTP;
JsonToSend: TMemoryStream;

Para acertar os uses, é só colocar um componente do indy TIdHttp e um TIdSSLIOHandlerSocketOpenSSL

Para o Delphi 11.3 ou community

Agora, marcelomgoncalves disse:

Para o Delphi 11.3 ou community

insira as seguintes units na cláusula uses:

IdBaseComponent, IdComponent, IdIOHandler, IdIOHandlerSocket,IdIOHandlerStack,
  IdSSL, IdSSLOpenSSL, IdTCPConnection, IdTCPClient, IdHTTP;

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.