locked
SSL Zertifikatsproblem mit Multiple-Site-Zertifikat RRS feed

  • Frage

  • Hallo Windows Phone Community,

    ich habe derzeit ein Problem das wir ein neues Zertifikat geordert haben was mehrere Seiten enthält (www.seite.de/seite.de/www.seite.com).
    Im Internet Explorer Mobile sowie Opera Mini kann man unsere Seite ohne Probleme (Zertifikatsfehler) aufrufen.
    Weiterhin gibt es keinerlei Probleme bei der Webservice Kommunikation mit dem iPhone sowie J2ME Geräten.

    Im .NET CF bekomme ich immer:
    "Fehler bei der Validierungsprozedur für das Remotezertifikat.
    Mit dem Remoteserver konnte keine Vertrauensstellung hergestellt werden.
    Status = TrustFailure"

    Die CertificatePolicy würde ich nur sehr ungern ändern:
    class MyPolicy : ICertificatePolicy
    {
      public bool CheckValidationResult(ServicePoint srvPoint,
      X509Certificate certificate, WebRequest request, int certificateProblem)
      {
        return true;
      }
    }
    

    da die derzitigen Installtionen von dem Server/Clusterwechsel nichts mitbekommen sollen.

    Durch weitere Untersuchungen habe ich folgendes im StacklTrace gefunden:
    System.dll!System.Net.Connection.certValidator(byte[] certData = {byte[856]}, System.Net.CertTrust_ErrorStatus errors = RevocationStatusUnknown) + 0x142 bytes

    RevocationStatusUnknown
    Specifies that it is not possible to determine whether the certificate has been revoked. This can be due to the certificate revocation list (CRL) being offline or unavailable.

    Anscheinend besteht der Fehler darin das das .NET CF nicht mit einem multiple Site SSL Zertifikat arbeiten kann.
    Ich würde gern wissen was die internal Methode GetDnsName zurückgibt. Der zurückgegebene String wird nämlich in den Methode certificateCommonNameMatchesHostName gesteckt:

    (Auszug aus der System.dll CF 3.5 System.Net.Connection)

    private static bool certificateCommonNameMatchesHostName(string dnsName, string certCommonName)
    {
      try
      {
        if (certCommonName.Equals(dnsName, StringComparison.OrdinalIgnoreCase))
        {
          return true;
        }
        int index = certCommonName.IndexOf("*", StringComparison.Ordinal);
        if (index >= 0)
        {
          int startIndex = certCommonName.IndexOf(".", StringComparison.Ordinal);
          if (index == (startIndex - 1))
          {
            string str = certCommonName.Substring(0, index);
            string str2 = certCommonName.Substring(startIndex);
            int length = dnsName.IndexOf(".", StringComparison.Ordinal);
            if (length >= 0)
            {
              string str3 = dnsName.Substring(0, length);
              string str4 = dnsName.Substring(length);
              if (str4.IndexOf(".", 1, StringComparison.Ordinal) == -1)
              {
                return false;
              }
              if (str4.Equals(str2, StringComparison.OrdinalIgnoreCase) && str3.StartsWith(str, StringComparison.OrdinalIgnoreCase))
              {
                return true;
              }
            }
          }
        }
      }
      catch (Exception exception)
      {
        ThrowIfFatalException(exception);
      }
      return false;
    }
    


    Hier wird nur überprüft ob der DNS Name übereinstimmt oder sich ein "*" für ein WildCard SSL Zertifikat enthalten ist.
    Nun vermute ich hier den Fehler und es betrifft leider nur das .NET CF.

    Ich hoffe ihr könnt mir weiterhelfen.
    Vielleicht hat einer eine Idee wie man an die Ausgabe der Methode System.Security.Cryptography.X509Certificates.X509Certificate.GetDnsName kommt.

    Vielen Dank

    MfG Stephan
    Montag, 12. Juli 2010 07:45

Antworten

  • Hallo Windows Phone Community,

    wie ich es mir schon gedacht habe liegt das Problem im .NET CF 3.5!
    Ich habe mit dem Reflector AddIn die mscorlib generieren lassen so das man durch die Assembly steppen kann.
    Somit konnte ich herausfinden das die GetDnsName nur einen Eintrag (www.seite.de) zurückgibt.
    Daraufhin schlägt das matching (siehe oben) fehl.

    Entweder ich versuche die Reihenfolge der Zertifikats-Alternativ-Namen bei Thawte/Geotrust zu ändern oder wir müssen das Multiple-Site-Zertifikat in mehrere Zertifikate aufteilen (3 Stück) was jedoch wieder in mehr Aufwand serverseitig zu Folge hat. Viell. hilft der Post jemand anders weiter und verbrät nicht soviel wie ich darin.

    Gruß Stephan

    • Als Antwort markiert snoerenberg Montag, 12. Juli 2010 19:58
    Montag, 12. Juli 2010 19:57