[.net] .Net에서 웹 서비스를 호출 할 때 유효하지 않은 SSL 인증서 오류 우회

아직 유효한 SSL 인증서가없는 새 SharePoint를 설정하고 있습니다. 설정에 대한 일부 메타 데이터를 검색하기 위해 Lists 웹 서비스를 호출하고 싶습니다. 그러나 이렇게하려고하면 예외가 발생합니다.

기본 연결이 닫혔습니다. SSL / TLS 보안 채널에 대한 신뢰 관계를 설정할 수 없습니다.

중첩 된 예외에는 오류 메시지가 포함됩니다.

유효성 검사 절차에 따라 원격 인증서가 유효하지 않습니다.

이는 임시 인증서를 사용하고 있기 때문에 정확합니다.

내 질문은 : .Net 웹 서비스 클라이언트 ( SoapHttpClientProtocol )에 이러한 오류를 무시하도록 어떻게 알릴 수 있습니까?



답변

이 문제에 직면했을 때 사용한 접근 방식은 임시 인증서의 서명자를 해당 컴퓨터의 신뢰할 수있는 기관 목록에 추가하는 것이 었습니다.

저는 일반적으로 CACERT로 생성 된 인증서로 테스트를 수행하고이를 신뢰할 수있는 기관 목록에 추가하면 원활하게 작동했습니다.

이렇게하면 응용 프로그램에 사용자 지정 코드를 추가 할 필요가 없으며 응용 프로그램이 배포 될 때 발생할 일을 제대로 시뮬레이션 할 수 있습니다. 따라서 이것이 프로그래밍 방식으로 검사를 해제하는 데 탁월한 솔루션이라고 생각합니다.


답변

또는 인증 오류를 무시하는 콜백 대리인을 등록 할 수 있습니다.

...
ServicePointManager.ServerCertificateValidationCallback = MyCertHandler;
...

static bool MyCertHandler(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors error)
{
// Ignore errors
return true;
}


답변

Jason S의 대답처럼 :

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

나는 이것을 내 Main에 넣고 코드 줄을 호출하기 전에 내 app.config보고 테스트합니다 (ConfigurationManager.AppSettings["IgnoreSSLCertificates"] == "True").


답변

이 방법으로 해결했습니다.

해당 오류를 일으키는 SSL 웹 서비스를 호출하기 직전에 다음을 호출하십시오.

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

/// <summary>
/// solution for exception
/// System.Net.WebException: 
/// The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.
/// </summary>
public static void BypassCertificateError()
{
    ServicePointManager.ServerCertificateValidationCallback +=

        delegate(
            Object sender1,
            X509Certificate certificate,
            X509Chain chain,
            SslPolicyErrors sslPolicyErrors)
        {
            return true;
        };
}


답변

DownloadString을 사용하여 동일한 오류가 발생했습니다. 이 페이지의 제안으로 아래와 같이 작동하도록 만들 수있었습니다.

System.Net.WebClient client = new System.Net.WebClient();
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
string sHttpResonse = client.DownloadString(sUrl);


답변

ServicePointManager.ServerCertificateValidationCallback +=
            (mender, certificate, chain, sslPolicyErrors) => true;

invaild ssl을 우회합니다. 웹 서비스 생성자에 작성하십시오.


답변

초보자를 위해 부분 서비스 클래스를 별도의 cs 파일로 확장하고 “imanabidi”에서 제공 한 코드를 추가하여 통합 할 수 있습니다.