.Net'te web hizmetlerini ararken geçersiz SSL sertifika hatalarını atlayın


88

Henüz geçerli bir SSL sertifikamız olmayan yeni bir SharePoint kuruyoruz. Kurulumla ilgili bazı meta verileri almak için Listeler web hizmetini aramak istiyorum. Ancak, bunu yapmaya çalıştığımda, istisna ile karşılaşıyorum:

Temel bağlantı kapatıldı: SSL / TLS güvenli kanalı için güven ilişkisi kurulamadı.

Yuvalanmış istisna şu hata mesajını içerir:

Uzak sertifika, doğrulama prosedürüne göre geçersiz.

Geçici bir sertifika kullandığımız için bu doğrudur.

Sorum şu: .Net web hizmeti istemcisine ( SoapHttpClientProtocol ) bu hataları göz ardı etmesini nasıl söyleyebilirim ?

Yanıtlar:


18

Bu sorunla karşılaştığımda kullandığım yaklaşım, geçici sertifikanın imzalayanını söz konusu bilgisayardaki güvenilir yetkililer listesine eklemekti.

Normalde CACERT ile oluşturulmuş sertifikalarla testler yapıyorum ve onları güvenilir otoriteler listeme eklemek çok çalıştı.

Bunu bu şekilde yapmak, uygulamanıza herhangi bir özel kod eklemeniz gerekmediği ve uygulamanız dağıtıldığında ne olacağını uygun şekilde simüle ettiği anlamına gelir. Bu nedenle, bunun, kontrolü programlı olarak kapatmak için daha iyi bir çözüm olduğunu düşünüyorum.


Bu benim de ilk fikrimdi. Maalesef sertifikanın süresi de dolmuş, bu yüzden ona güvenmek imkansız.
jan.vdbergh

CA sertifikası gibi birini kullanamamanızın herhangi bir nedeni var mı? Bu bir test sertifikasıysa, bununla devam edebilirsiniz. Bu kontrolleri kapatmanın bir yolu olup olmadığından emin değilim!
Simon Johnson

113

Alternatif olarak, sertifika hatasını yok sayan bir geri arama temsilcisi kaydedebilirsiniz:

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

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

1
Bu statik yöntemi global.asax'a ekledim ve olayı "OnApplicationStart" üzerine ayarladım. bir cazibe gibi çalıştı. Teşekkürler
Juan Zamora

1
@JuanZamora Ben de seninle aynı şeyi yaptım. İşe yaradı!
Sachin BR

5
"Ortadaki Adam" saldırısına karşı savunmasız olmak istiyorsanız, yapmanız gereken tek şey bu ...
Houtman

2
İdeal olarak, bunu yalnızca bir geliştirme ortamında yapmalısınız.
Ron DeFreitas

79

Jason S'nin cevabı gibi:

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

Bunu Ana Sayfama koydum app.configve (ConfigurationManager.AppSettings["IgnoreSSLCertificates"] == "True")o kod satırını aramadan önce kendime bakıp test ettim .


24

Bunu şu şekilde çözdüm:

Bu hataya neden olan ssl web hizmetinizi aramadan hemen önce aşağıdakileri arayın:

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;
        };
}

12

DownloadString kullanırken aynı hatayı yaşıyordum; ve bu sayfadaki önerilerle aşağıdaki gibi çalışmasını sağladı

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

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

geçersiz ssl'yi atlayacak. Bunu web hizmeti kurucunuza yazın.


1

Yeni başlayanlar için, kısmi hizmet sınıfınızı ayrı bir cs dosyasında genişletebilir ve entegre etmek için "imanabidi" tarafından sağlanan kodu ekleyebilirsiniz.


1

Simon Johnsons gönderisini daha da genişletmek için - İdeal olarak, üretimde göreceğiniz koşulları simüle edecek bir çözüm istersiniz ve kodunuzu değiştirmek bunu yapmaz ve kodu dağıtmadan önce çıkarmayı unutursanız tehlikeli olabilir.

Bir çeşit kendinden imzalı bir sertifikaya ihtiyacınız olacak. IIS Express kullanıyorsanız bunlardan birine zaten sahip olacaksınız, sadece bulmanız gerekecek. Firefox'u veya istediğiniz tarayıcıyı açın ve geliştirici web sitenize gidin. Sertifika bilgilerini URL çubuğundan görüntüleyebilmelisiniz ve tarayıcınıza bağlı olarak sertifikayı bir dosyaya aktarabilmelisiniz.

Ardından, MMC.exe'yi açın ve Sertifika ek bileşenini ekleyin. Sertifika dosyanızı Güvenilir Kök Sertifika Yetkilileri deposuna aktarın ve ihtiyacınız olan tek şey bu. "Kişisel" gibi başka bir mağazaya değil, o mağazaya girdiğinden emin olmak önemlidir. MMC veya sertifikalara aşina değilseniz, bunun nasıl yapılacağı hakkında bilgi veren çok sayıda web sitesi vardır.

Artık bilgisayarınız bir bütün olarak kendi oluşturduğu tüm sertifikalara dolaylı olarak güvenecek ve bunu özel olarak ele almak için kod eklemenize gerek kalmayacak. Üretime geçtiğinizde, orada kurulu uygun ve geçerli bir sertifikanız olması koşuluyla çalışmaya devam edecektir. Bunu bir üretim sunucusunda yapmayın - bu kötü olur ve sunucudakiler dışında başka istemciler için çalışmaz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.