Veröffentlicht: 08.02.2011

PHP/.NET/C#: Fehlerhafte SSL Zertifikate ignorieren

Wieder so ein Code Schnipsel den ich häufiger mal brauche und immer wieder vergesse.

Bei der Entwicklung neuer Programme nutze ich oft selbst signierte Zertifikate, die aber sinnigerweise von keinem Programm ohne weiteres angenommen werden. Firefox meldet beispielsweise “Diese Verbindung wird nicht vertraut”, .NET wirft eine Exception mit der Meldung “Für den geschützten SSL/TLS-Kanal konnte keine Vertrauensstellung hergestellt werden.” und das cURL Modul von PHP gibt ein leeres Ergebnis zurück.

Was am Ende durchaus gewollt ist, stört bei der Entwicklung. Mit den folgenden Code Schnipseln könnt ihr das “Problem” beheben.

.NET / C#

Führt am Anfang eurer Applikation, bzw. vor dem Öffnen der ersten Verbindung den folgenden Code aus. Die Verbindungen sollten jetzt ohne Exception aufgebaut werden können.

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate { return true; });

PHP / cURL

Beim cURL Modul von PHP müssen die Optionen CURLOPT_SSL_VERIFYHOST und CURLOPT_SSL_VERIFYPEER auf false gesetzt werden, und schon funktioniert die Verbindung und gibt ein Ergebnis zurück.

$resCurl = curl_init("https://localhost/"); curl_setopt($resCurl,
CURLOPT_SSL_VERIFYHOST, false); curl_setopt($resCurl,
CURLOPT_SSL_VERIFYPEER, false); curl_setopt($resCurl,
CURLOPT_RETURNTRANSFER, true); $strReturn = curl_exec($resCurl);
curl_close($resCurl);