Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Skipp

HttpWebRequest com HTTPS

Recommended Posts

Ola amigos!

Estou tendo um problema que nao consigo resolver de forma alguma. Eu tenho um codigo que acessa uma paginae traz o conteudo dela pra mim...isso funciona normalmente com HTTP mas quando tento usar HTTPS da erro.

 

Segue abaixo o codigo:

 

Dim strURL as string = "https://www16.bb.com.br/site/mpag/"
		Dim loHttp As HttpWebRequest = WebRequest.Create(strURL)
		Dim lcPostData As String
		Dim lbPostBuffer As Byte()
		Dim loPostData As Stream

		lcPostData = "idConv=" & HttpUtility.UrlEncode("0000")
		lcPostData += "&valor=" & HttpUtility.UrlEncode("7850")
		lcPostData += "&refTran=" & HttpUtility.UrlEncode("00000000000000000")
		lcPostData += "&nome=" & HttpUtility.UrlEncode("Lucas")
		lcPostData += "&endereco=" & HttpUtility.UrlEncode("AV teste, 2373- RUA 2, 79 A")
		lcPostData += "&cidade=" & HttpUtility.UrlEncode("Taubaté")
		lcPostData += "&estado=" & HttpUtility.UrlEncode("SP")
		lcPostData += "&cep=" & HttpUtility.UrlEncode("12032000")
		lcPostData += "&dtVenc=" & HttpUtility.UrlEncode("07122006")
		lcPostData += "&msgLoja=" & HttpUtility.UrlEncode("Pagamento válido somente até a data de vencimento!<br><br><br><br><br><br><br><br><b>Número do pedido:</b> 000")
		lcPostData += "&versao=" & HttpUtility.UrlEncode("02")
		lcPostData += "&moeda=" & HttpUtility.UrlEncode("986")
		lcPostData += "&convClasse=" & HttpUtility.UrlEncode("001")
		lcPostData += "&tpPagamento=" & HttpUtility.UrlEncode("2")
		lcPostData += "&urlRetorno=" & HttpUtility.UrlEncode("http://www.sss.com.br")

		lbPostBuffer = Encoding.GetEncoding(1252).GetBytes(lcPostData)

		loHttp.Method = "POST"
		loHttp.ContentLength = lbPostBuffer.Length
		loHttp.Timeout = 1000000
		loHttp.UserAgent = Request.UserAgent.ToString

		loPostData = loHttp.GetRequestStream()
		loPostData.Write(lbPostBuffer, 0, lbPostBuffer.Length)
		loPostData.Close()


		Dim loWebResponse As HttpWebResponse = loHttp.GetResponse()

		Dim Enc As Encoding = Encoding.GetEncoding(1252)
		Dim loResponseStream As StreamReader = New StreamReader(loWebResponse.GetResponseStream(), Enc)

		lbCode.Text = loResponseStream.ReadToEnd().ToString

		loWebResponse.Close()
		loResponseStream.Close()

Erro que ele gera:

Server Error in '/diretorio' Application.

The remote certificate is invalid according to the validation procedure.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

a

Exception Details: System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.

 

Source Error:

 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

 

Stack Trace:

 

[AuthenticationException: The remote certificate is invalid according to the validation procedure.]

System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, Exception exception) +1036898

System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest) +333

System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) +313

System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest) +386

System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest) +293

System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) +297

System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest) +364

System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) +313

System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest) +386

System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest) +293

System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) +297

System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest) +364

System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) +313

System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest) +386

System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest) +293

System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) +297

System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest) +364

System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) +313

System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest) +138

System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult) +120

System.Net.TlsStream.CallProcessAuthentication(Object state) +47

System.Threading.ExecutionContext.runTryCode(Object userData) +66

System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(

ryCode code, CleanupCode backoutCode, Object userData) +0

System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) +166

System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) +145

System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult result) +728

System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size) +44

System.Net.PooledStream.Write(Byte[] buffer, Int32 offset, Int32 size) +21

System.Net.ConnectStream.WriteHeaders(Boolean async) +266

 

[WebException: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.]

System.Net.HttpWebRequest.GetRequestStream() +1504461

aaa.grabber.urlGrabber(String strURL) in ---grabber.aspx.vb:64

aaa.grabber.Page_Load(Object sender, EventArgs e) in ---grabber.aspx.vb:31

System.Web.UI.Control.OnLoad(EventArgs e) +99

System.Web.UI.Control.LoadRecursive() +47

System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1061

 

 

Version Information: Microsoft .NET Framework Version:2.0.50727.42; ASP.NET Version:2.0.50727.210

Compartilhar este post


Link para o post
Compartilhar em outros sites

Skipp, bom dia tudo bem?

 

Insere no seu código:

 

(...)
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
(...)

// Insira isto no page load dá página (se for webservice colocar antes do request)

System.Net.ServicePointManager.ServerCertificateValidationCallback +=
delegate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors sslError)
{
//TODO: não esqueça de implementar uma rotina de verificação, caso contrário todos os certificados serão aceitos.

	bool validationResult = true;
	return validationResult;
};

fonte:

http://msdn2.microsoft.com/en-us/library/s...oncallback.aspx

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajuda KlayGomes, mas estou tendo problemas para converter isso para VB.NET!

Você pode me ajudar...eu sou novato com VB.NET e to apanhando aqui!!

 

Muito obrigado pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha:

http://www.google.com.hk/search?q=ServerCe...art=10&sa=N

 

(...)
Imports System.Net.Security
Imports System.Security.Cryptography.X509Certificates
(...)

Private Function ChckRemote(ByVal sender As Object, ByValcertificate As X509Certificate, ByVal chain As X509Chain, 
ByVal sslPolicyErrors As System.Net.Security.SslPolicyErrors) As Boolean
//TODO: não esqueça de implementar uma rotina de verificação, caso contrário todos os certificados serão aceitos.
	Return True
End Function
ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(ChckRemote)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.