문제

안녕하세요 저는 https에 웹 레퀴스트를 게시하려는 문제에 직면 해 있습니다.

다음 오류를 받았습니다

1.-기본 연결이 닫혔습니다. 원격 서버에 연결할 수 없습니다.

2.-작동 시간 초과

3- 기본 연결이 닫혔습니다. SSL/TLS 용 안전한 채널을 설정할 수 없었습니다.

회사와 고객 회사의 약 3 ~ 4 가지 프록시를 시도했지만 제한이없는 ISP 제공 업체와 직접적으로 나가지 않아도 다음 방법을 실행할 때 위의 오류가 발생합니다.

WebRequest.GetRequestStream() 

이것은 프록시 뒤에 발생하거나 그렇지 않으며, 요청은 프록시 뒤에있는 하나의 단일 PC에서만 성공적으로 게시 할 수 있습니다. 프록시에는 클라이언트 인증서가 설치되어 있지 않습니다.

이는 .NET Framework 1.1 아래에 있으며 요청에는 이미 네트워크 자격 증명이 포함되어 있습니다.

무엇이 될 수 있습니까?

업데이트

내부 예외는 세 번째 오류가 다음과 같습니다. 함수는 성공적으로 완료되었지만 컨텍스트를 완료하려면 다시 호출해야합니다.

IISPER.H에 따르면 선적 서류 비치 이 오류는

//
// MessageId: SEC_I_CONTINUE_NEEDED
//
// MessageText:
//
//  The function completed successfully, but must be called
//  again to complete the context
//
#define SEC_I_CONTINUE_NEEDED            ((HRESULT)0x00090312L)

~에 MSDN 이것은

sec_i_continue_needed 클라이언트는 출력 토큰을 서버로 보내고 반환 토큰을 기다려야합니다. 그런 다음 반환 된 토큰은 다른 호출로 통과하여 초기화 보안 context (schannel)를 통과합니다. 출력 토큰이 비어있을 수 있습니다.

이것은 PC에 클라이언트 인증서가 없다는 것을 의미합니까?

도움이 되었습니까?

해결책

SSL Certs 등과의 불일치에 관한 한, 일을 복잡하게 할 수있는 모든 것들이 있습니다. 그러나 먼저, 당신은 명백한 것들을 배제하기 위해 몇 가지 기본 디버깅을해야합니다.

- 다른 서버에 간단한 웹 요청을 보내려고 했습니까? (보안되지 않은) http 및 (보안) https를 모두 시도하십시오.

- 다른 컴퓨터 나 다른 네트워크에서 연결 해보셨습니까? 당신은 클라이언트가 프록시 뒤에 있다고 언급했습니다. 먼저 프록시가있는 컴퓨터를 시도하여 배제하십시오.

- 세션 내에서 여러 개의 웹 레퀴스트를 만들고 있습니까? 공개 요청 수에는 어려운 일이 있으므로 Webresponse를받은 후에는 문을 닫아야합니다. 아마도 하나의 요청만으로 테스트 프로그램을 만들 수 있습니다.

그렇다면 좁히지 않으면 서버 나 프록시와 함께 더 복잡한 것일 수 있습니다. Netshark와 같은 프로그램으로 나가는 네트워크 패킷을 추적하여 물건이 붙어있는 곳을 추적하려고 시도 할 수 있습니다.

다른 팁

HTTP 트래픽을 사용하여 흔적을 만들 수 있습니다. 바이올리니스트 또는 네트워크 패킷 스니핑 도구와 같은 네트워크 패킷 스니핑 도구 미묘한 Whireshark 작동하는 기계와 다른 기계 중 하나에서 결과를 비교하십시오. 이것은 상당히 낮은 수준이지만 문제에 대해 약간의 빛을 발할 수 있습니다.

  • 다른 컴퓨터에서 443으로 텔넷을 텔넷으로 텔넷으로 텔넷을 사용할 수 있다면 클라이언트 머신이 해당 포트에 요청을 받고 있기 때문에 처음 두 가지가 아닙니다.

창문에서

telnet <domainname> 443

그리고 화면이 연결되면 비워집니다 (히트 리턴을 몇 번 나가십시오)

  • 프록시는 HTTP가 읽을 수 없기 때문에 요청에 대해 실제로 신경 쓰지 않을 수도 있고 그렇지 않을 수 있습니다.

  • 다른 기계에는 클라이언트 인증서와 인증 체인이 설치되어 있습니까?

SSL 인증서 이름은 아마도 일치하지 않을 것입니다. 이것은 종종 자체 서명 된 인증서의 경우입니다.

해결책은 인증서가 유효한지 확인하기 위해 항상 진실을 반환하거나 필요한 인증을 수행하는 자체 인증 루틴을 작성하는 것입니다.

// .NET 2.0+
...
ServicePointManager.ServerCertificateValidationCallback += MyValidationCallback
...
public bool MyValidationCallback(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors err)
{
  return true;
}

// .NET 1.1
public class MyCertificatePolicy : ICertificatePolicy
{
  public bool CheckValidationResult(ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem)
  {
    return true;
  }
}
...
ServicePointManager.CertificatePolicy = new MyCertificatePolicy();
...
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top