gkenji Postado 17 Abril, 2021 Postado 17 Abril, 2021 Estou fazendo o consumo de uma API Rest na qual precisa carregar um certificado. Consumi ele no Postman e funcionou: -> Entrei em File -> settings -> certificates -> coloquei o HOST e o arquivo *.p12 -> Fiz uma requisição POST, com <authorization> basic, passando usuário e senha.. -> Header só adicionei: Content-Type : application/json -> Body: {"grant_type": "client_credentials"} Eu tentei fazer exatamente isso com o REST Debugger.. Não deu certo.. authorization, content type, body td isso eu configurei.. Mas o certificado eu não sei aonde colocar no RESTClient/RESTRequest ou RESTResponse Alguém já passou por isso? ou sabe alguma solução alternativa?
DanielSantos Postado 30 Abril, 2021 Postado 30 Abril, 2021 Conseguiu uma solução? Estou pesquisando exatamente isso.
Solution gkenji Postado 3 Maio, 2021 Autor Solution Postado 3 Maio, 2021 Consegui, usando o INDY.. HttpClient := TIdHTTP.Create( nil ); HttpClient.ConnectTimeout := 20000; HttpClient.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil); with TIdSSLIOHandlerSocketOpenSSL(HttpClient.IOHandler).SSLOptions do begin CertFile := [CaminhoCertificado.crt.pem]; //mudar caminho certificado aqui KeyFile := [CaminhoCertificado.key.pem]; //mudar caminho certificado aqui Mode := sslmUnassigned; SSLVersions := [sslvTLSv1_2]; //mudar protocolos de SSL aqui end; with HttpClient do begin Request.CustomHeaders.Values['Content-Type'] := 'application/json; application/x-www-form-urlencoded;'; Request.ContentType := 'application/json'; Request.CharSet := 'utf-8'; 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)'; HandleRedirects := True; HTTPOptions := [hoKeepOrigProtocol, hoInProcessAuth]; end; Body:= '[conteudo body]'; //mudar body aqui JsonToSend := TMemoryStream.Create; WriteStringToStream(JsonToSend, Body, IndyTextEncoding_UTF8); JsonToSend.Position := 0; sResponse := HttpClient.Post([URL],JsonToSend); //mudar URL aqui 1 1
Jhonlenon Ribeiro Postado 6 Fevereiro, 2022 Postado 6 Fevereiro, 2022 gkenji Boa tarde amigo, gostaria de saber qual as uses vc declarou no seu codigo e os tipo de variavel que vc usou nessa linha baixo. Body:= '[conteudo body]'; //mudar body aqui JsonToSend := TMemoryStream.Create; WriteStringToStream(JsonToSend, Body, IndyTextEncoding_UTF8); JsonToSend.Position := 0; sResponse := HttpClient.Post([URL],JsonToSend); //mudar URL aqui
jose lucio paiva junior Postado 10 Maio, 2022 Postado 10 Maio, 2022 Bom dia, with TIdSSLIOHandlerSocketOpenSSL(HttpClient.IOHandler).SSLOptions do begin CertFile := [CaminhoCertificado.crt.pem]; //mudar caminho certificado aqui KeyFile := [CaminhoCertificado.key.pem]; //mudar caminho certificado aqui Mode := sslmUnassigned; SSLVersions := [sslvTLSv1_2]; //mudar protocolos de SSL aqui end; eu vejo nesse codigo que passas o caminho do certificado digital, mas esse arquivo é qual extensão ?, pfx?, pem?, e vejo que nao passas a senha do certificado, onde seria para colocar ?
João Paulo Alcântara Postado 11 Maio, 2022 Postado 11 Maio, 2022 Em 03/05/2021 at 15:18, gkenji disse: Consegui, usando o INDY.. HttpClient := TIdHTTP.Create( nil ); HttpClient.ConnectTimeout := 20000; HttpClient.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil); with TIdSSLIOHandlerSocketOpenSSL(HttpClient.IOHandler).SSLOptions do begin CertFile := [CaminhoCertificado.crt.pem]; //mudar caminho certificado aqui KeyFile := [CaminhoCertificado.key.pem]; //mudar caminho certificado aqui Mode := sslmUnassigned; SSLVersions := [sslvTLSv1_2]; //mudar protocolos de SSL aqui end; with HttpClient do begin Request.CustomHeaders.Values['Content-Type'] := 'application/json; application/x-www-form-urlencoded;'; Request.ContentType := 'application/json'; Request.CharSet := 'utf-8'; 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)'; HandleRedirects := True; HTTPOptions := [hoKeepOrigProtocol, hoInProcessAuth]; end; Body:= '[conteudo body]'; //mudar body aqui JsonToSend := TMemoryStream.Create; WriteStringToStream(JsonToSend, Body, IndyTextEncoding_UTF8); JsonToSend.Position := 0; sResponse := HttpClient.Post([URL],JsonToSend); //mudar URL aqui Meses depois de ter iniciado minha migração desse serviço, do Delphi para o NodeJS, acho esse ouro aqui! Muito obrigado! Espero que todos tenham conseguido aí também.
gkenji Postado 12 Maio, 2022 Autor Postado 12 Maio, 2022 Nem lembrava mais desse código.. Utilizei para fazer a comunicação com o PIX .. Caso tenham dúvidas só falar.. abraço!
Kauan Cândido Postado 8 Novembro, 2022 Postado 8 Novembro, 2022 Em 12/05/2022 at 07:55, gkenji disse: Nem lembrava mais desse código.. Utilizei para fazer a comunicação com o PIX .. Caso tenham dúvidas só falar.. abraço! To precisando disso pra fazer a comunicação com pix tbm, mas estou usando java
Moderadores Juliomar Marchetti Postado 9 Novembro, 2022 Moderadores Postado 9 Novembro, 2022 Em 08/11/2022 at 09:45, Kauan Cândido disse: To precisando disso pra fazer a comunicação com pix tbm, mas estou usando java dai sugiro procurar uma comunidade java para a dúvida Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
Moysés A. Silva Postado 7 Dezembro, 2022 Postado 7 Dezembro, 2022 Em 03/05/2021 at 15:18, gkenji disse: Consegui, usando o INDY.. HttpClient := TIdHTTP.Create( nil ); HttpClient.ConnectTimeout := 20000; HttpClient.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil); with TIdSSLIOHandlerSocketOpenSSL(HttpClient.IOHandler).SSLOptions do begin CertFile := [CaminhoCertificado.crt.pem]; //mudar caminho certificado aqui KeyFile := [CaminhoCertificado.key.pem]; //mudar caminho certificado aqui Mode := sslmUnassigned; SSLVersions := [sslvTLSv1_2]; //mudar protocolos de SSL aqui end; with HttpClient do begin Request.CustomHeaders.Values['Content-Type'] := 'application/json; application/x-www-form-urlencoded;'; Request.ContentType := 'application/json'; Request.CharSet := 'utf-8'; 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)'; HandleRedirects := True; HTTPOptions := [hoKeepOrigProtocol, hoInProcessAuth]; end; Body:= '[conteudo body]'; //mudar body aqui JsonToSend := TMemoryStream.Create; WriteStringToStream(JsonToSend, Body, IndyTextEncoding_UTF8); JsonToSend.Position := 0; sResponse := HttpClient.Post([URL],JsonToSend); //mudar URL aqui Obrigado vou testar, fiz um teste aqui usando Indy mas retornou o seguinte erro : Could not load certificate. error:23076071 : PKCS12 routines : PKCS12_parse : mac verify failure o KeyFile é um arquivo de Certificado também ou uma senha por extenso do tipo "senhacertificado123" ? Atenciosamente, Moysés A. Silva
Moderadores Juliomar Marchetti Postado 8 Dezembro, 2022 Moderadores Postado 8 Dezembro, 2022 6 horas atrás, Moysés A. Silva disse: Obrigado vou testar, fiz um teste aqui usando Indy mas retornou o seguinte erro : Could not load certificate. error:23076071 : PKCS12 routines : PKCS12_parse : mac verify failure o KeyFile é um arquivo de Certificado também ou uma senha por extenso do tipo "senhacertificado123" ? Atenciosamente, Moysés A. Silva pera tu está usando o componennte ACBrPIXCD? ou está implementando algo seu? 1 Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
Moysés A. Silva Postado 8 Dezembro, 2022 Postado 8 Dezembro, 2022 8 horas atrás, Juliomar Marchetti disse: pera tu está usando o componennte ACBrPIXCD? ou está implementando algo seu? Não estou usando o ACBrPIXCD, estou fazendo algo nosso para a Empresa onde trabalho, só falta o HandShake mesmo para ter o retorno do access_token do Sicoob para o restante das requisições. Atenciosamente, Moysés A. Silva.
Moysés A. Silva Postado 9 Dezembro, 2022 Postado 9 Dezembro, 2022 (editado) Em 03/05/2021 at 15:18, gkenji disse: Consegui, usando o INDY.. HttpClient := TIdHTTP.Create( nil ); HttpClient.ConnectTimeout := 20000; HttpClient.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil); with TIdSSLIOHandlerSocketOpenSSL(HttpClient.IOHandler).SSLOptions do begin CertFile := [CaminhoCertificado.crt.pem]; //mudar caminho certificado aqui KeyFile := [CaminhoCertificado.key.pem]; //mudar caminho certificado aqui Mode := sslmUnassigned; SSLVersions := [sslvTLSv1_2]; //mudar protocolos de SSL aqui end; with HttpClient do begin Request.CustomHeaders.Values['Content-Type'] := 'application/json; application/x-www-form-urlencoded;'; Request.ContentType := 'application/json'; Request.CharSet := 'utf-8'; 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)'; HandleRedirects := True; HTTPOptions := [hoKeepOrigProtocol, hoInProcessAuth]; end; Body:= '[conteudo body]'; //mudar body aqui JsonToSend := TMemoryStream.Create; WriteStringToStream(JsonToSend, Body, IndyTextEncoding_UTF8); JsonToSend.Position := 0; sResponse := HttpClient.Post([URL],JsonToSend); //mudar URL aqui Quais as declarações nas Variáveis e Uses ? Atenciosamente, Moysés A. Silva. Editado 9 Dezembro, 2022 por Moysés A. Silva
gkenji Postado 9 Dezembro, 2022 Autor Postado 9 Dezembro, 2022 21 minutos atrás, Moysés A. Silva disse: Quais as declarações nas Variáveis e Uses ? Atenciosamente, Moysés A. Silva. 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
Moysés A. Silva Postado 9 Dezembro, 2022 Postado 9 Dezembro, 2022 39 minutos atrás, 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 certo, ja tem os componentes do Indy TIdHttp e um TIdSSLIOHandlerSocketOpenSSL, mesmo assim não reconheceu ( WriteStringToStream, IndyTextEncoding_UTF8 e o sResponse) em anexo prints do com erro: "Error connecting with SSL. error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed" e código do teste para o HandShake da Requisição token do Sicoob Atenciosamente, Moysés A. Silva. Erros Indy Sicoob.rar
gkenji Postado 9 Dezembro, 2022 Autor Postado 9 Dezembro, 2022 Deu erro de SSL, essa mensagem de erro "certificate verify failed", me parece que não é o certificado correto.. Caso seja correto o certificado.. verifica esse ponto do código.. Mode := sslmUnassigned; <--- verifica esse ponto também.. SSLVersions := [sslvTLSv1_2]; <--- pesquisa, existe outros tipos de forma de SSL versões e etc..
RaphaelComba Postado 11 Março, 2023 Postado 11 Março, 2023 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 4
Vando BR Postado 23 Setembro, 2023 Postado 23 Setembro, 2023 Olá pessoal, estive implementando a API Boleto e API PIX do itaú em delphi, aqui na empresa e agora está tudo funcionando, tenho algumas dúvidas sobre o certificado e queria saber se algum de vocês sabem me dizer.... 1 - Pensando em segurança... Os arquivos "Certificado.crt" e "ChavePrivada.key" que são gerados, podem ficar junto com a aplicação ou não? Pergunto isso porque o sistema que temos é utilizado por dezenas de usuários em cidades diferentes, que nesse caso, precisaria dos arquivos crt e key junto com o executável para que as requisições funcionem... Um usuário mal intencionado, poderia fazer mal uso desses dois arquivos? 2 - No tutorial do itaú, vi que eles sugerem a geração do arquivo .PFX + Senha, eu fiz a geração desse arquivo pras duas API. E daí vem minha dúvida principal: É possível fazer a autenticação no delphi com indy, usando APRENAS o arquivo "PFX + senha"? (E "descartar" o crt e key). Se sim, como declarar esses parâmetros? Meu código atual que funciona é esse abaixo, que usa o arquivo Certificado.crt e o ChavePrivada.key. Queria usar apenas o .PFX + senha, se for possível... IOHandle.SSLOptions.CertFile := CertFile_PIX; IOHandle.SSLOptions.KeyFile := KeyFile_PIX; Desde já obrigado pela ajuda contida aqui ^^
Moderadores Juliomar Marchetti Postado 25 Setembro, 2023 Moderadores Postado 25 Setembro, 2023 sim para cada um e se tu usa o ACBrPIXCD ele já faz isso pra ti e tu pode carregar do banco e não precisa ser arquivo fixo Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
Vando BR Postado 2 Outubro, 2023 Postado 2 Outubro, 2023 Em 25/09/2023 at 09:14, Juliomar Marchetti disse: sim para cada um e se tu usa o ACBrPIXCD ele já faz isso pra ti e tu pode carregar do banco e não precisa ser arquivo fixo Não uso ACBrPIXCD, segundo a dica, agora estou fazendo o armazenamento do crt e key no banco de dados e crio eles em tempo de execução. Ficou bem melhor do que distribuir os arquivos junto com o instalador (e vai facilitar possíveis atualizações de certificados/keys). Obrigado pela solução.
User123135435 Postado 4 Abril Postado 4 Abril 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 Deu certo dessa forma colocando esses dois arquivo, alguém sabe se é possível converter o .pfx para esses dois arquivos diretamente no Delphi?
RaphaelComba Postado 4 Abril Postado 4 Abril 14 minutos atrás, User123135435 disse: Deu certo dessa forma colocando esses dois arquivo, alguém sabe se é possível converter o .pfx para esses dois arquivos diretamente no Delphi? Bom dia, cara eu não faço muita ideia de como fazer para executar comandos openssl via Delphi, talvez algum membro saiba, mas tem esse repositório no github (GitHub - lminuti/Delphi-OpenSSL: Delphi wrapper for OpenSSL), que faz uso do openssl via delphi da uma olhada nos fonte e verifica se lhe ajuda. 1
Moderadores Juliomar Marchetti Postado 4 Abril Moderadores Postado 4 Abril 18 minutos atrás, User123135435 disse: Deu certo dessa forma colocando esses dois arquivo, alguém sabe se é possível converter o .pfx para esses dois arquivos diretamente no Delphi? tem a unit do openssl que tu pode pegar e fazer que está no ACBr dá pra fazer omesmo que a linha de comando 1 Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
User123135435 Postado 8 Abril Postado 8 Abril Em 04/04/2024 at 11:11, Juliomar Marchetti disse: tem a unit do openssl que tu pode pegar e fazer que está no ACBr dá pra fazer omesmo que a linha de comando Boa tarde, tudo bem? Poderia me mandar o print ou parte do código da rotina? Eu procurei no fonte mas não consegui encontrar a parte responsável por fazer essa extração do par de chaves do certificado
Moderadores Juliomar Marchetti Postado 9 Abril Moderadores Postado 9 Abril Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
Recommended Posts
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 contaEntrar
Já tem uma conta? Faça o login.
Entrar Agora