Bom dia Pessoal.
A empresa em que trabalho está desenvolvendo a integração direta com os webservices em C#, estamos travados na conexão com o webservice, na documentação do pessoal da smarapd, eles falam que devemos criar uma cadeia de certificados confiáveis (jks) com o certificado do cliente (A1) e o certificado público do servidor disponibilizado por eles, gerar uma chave pública dessa cadeia de certificados, salvar na alteração cadastral do site e depois tentar a requisição. Mesmo fazendo isso, gerando um pfx dessa cadeia de certificado (jks) ou adicionando os dois certificados no handler do httpclient, estou tendo problemas de conexão "A solicitação foi anulada: Não foi possível criar um canal seguro para SSL/TLS".
Eu sei que o foco do fórum é o ACBR e componentes, mas já tentei vários outros e não tive sucesso.
Essa é a função que eu criei, é a mesma que utilizamos para o eSocial e eReinf.
try
{
System.Net.ServicePointManager.ServerCertificateValidationCallback += (sender2, cert, chain, sslPolicyErrors) => true;
var handler = new System.Net.Http.WebRequestHandler();
var certificate = new System.Security.Cryptography.X509Certificates.X509Certificate2(@"c:\certificado.pfx", "123456");
handler.ClientCertificates.Add(certificate);
using (var httpclient = new System.Net.Http.HttpClient(handler))
{
httpclient.DefaultRequestHeaders.AcceptEncoding.Clear();
httpclient.DefaultRequestHeaders.AcceptEncoding.Add(new System.Net.Http.Headers.StringWithQualityHeaderValue("gzip"));
httpclient.DefaultRequestHeaders.AcceptEncoding.Add(new System.Net.Http.Headers.StringWithQualityHeaderValue("deflate"));
//httpclient.DefaultRequestHeaders.Add("SOAPAction", "http://nfse.abrasf.org.br/RecepcionarLoteRpsSincrono");
httpclient.DefaultRequestHeaders.Host = "201.72.16.150";
httpclient.DefaultRequestHeaders.Connection.Add("Keep-Alive");
httpclient.DefaultRequestHeaders.UserAgent.Add(new System.Net.Http.Headers.ProductInfoHeaderValue("Apache-HttpClient", "4.1.1"));
httpclient.BaseAddress = new System.Uri("https://201.72.16.150/tbwhomolog/services/nfseSOAP");
var request = new System.Net.Http.HttpRequestMessage(System.Net.Http.HttpMethod.Post, "nfseSOAP");
request.Content = new System.Net.Http.StringContent("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">" +
"< soapenv:Header />" +
"< soapenv:Body >" +
"< RecepcionarLoteRpsSincronoRequest xmlns =\"http://nfse.abrasf.org.br\">" +
"< nfseCabecMsg >" +
"< ![CDATA[<? xml version = '1.0' encoding = 'UTF-8' ?>< cabecalho xmlns = 'http://www.abrasf.org.br/nfse.xsd' versao = '2.04' >< versaoDados > 2.04 </ versaoDados ></ cabecalho >]] >" +
"</ nfseCabecMsg >" +
"< nfseDadosMsg >" +
//"<!-- XmlAssinado -->" +
"</ nfseDadosMsg >" +
"</ RecepcionarLoteRpsSincronoRequest >" +
"</ soapenv:Body >" +
"</ soapenv:Envelope >",
System.Text.Encoding.UTF8,
"text/xml");
httpclient.SendAsync(request)
.ContinueWith(responseTask =>
{
if (responseTask.Result.IsSuccessStatusCode)
MessageBox.Show(responseTask.Result.Content.ReadAsStringAsync().Result);
else
MessageBox.Show("Erro código: " + responseTask.Result.StatusCode + "\n" + responseTask.Result.Content.ReadAsStringAsync().Result);
})
.Wait(new System.TimeSpan(120 * 10000000));
}
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}