none
Encrypted SQL-connection mittels build-in SSL option RRS feed

  • Frage

  • Hi,

     

    Ich versuche nun schon seit Tagen eine Server-Client-Testumgebung aufzusetzen, welche die in SQL Server 2005 eingebaute SSL Verschlüsselung verwendet.

     

    Ich habe bereits dutzende How-to’s, Forum Beiträge und Blogs gelesen, und bin mir auch recht sicher alles nach plan ausgeführt zu haben. Leider will es einfach nicht funktionieren; ich weiss nicht mehr sorecht weiter also wollte ich s mal hier probieren. Ich hoffe jemand kann mir helfen J

     

    Setup:

     

    Mein Test Setup besteht aus zwei Rechnern in einem Netzwerk.

     

    PC A (Server):

    Win Server 2003 (Domain Controller)

    SQL Server 2005 SP3 

    IP: 192.168.1.100

     

    PC B (Client):

    Win XP SP2

    SQL Client-tools 2005 SP3

    IP: 192.168.1.101

    Gateway: PC A

     

    Bis jetzt geschaft:

     

    • Auf PC B ist der login über den Domain Controller PC A möglich
    • Ich habe “IIS Service ”, und “CA Service ” auf PC A installiert.
    • Ich konnte ein Zertifikat auf PC A, mit Namen = PCA_cert erstellen.
    • Im “SQL Server Configuration Manager” konnte ich die SQL Server Network Configuration flag “ForceEncryption” auf YES , und ausserdem das zuvor generierte Zertifikat im Certificate tab auswählen.
    • Ich habe auf PC B im “SQL Server Configuration Manager” das SQL Client Network Configuration flag “UseEncryption” auf YES gestellt.
    • Ich habe WireShark (auf PC A ) benutzt um die Inhalte der SQL Pakete zu prüfen.

     

    Was nicht funktioniert:

     

    Ich dachte mir, dass nach einer Aktivierung der ForceEncryption option auf dem Server, der Client (mit clientsetting encryption=no) beim connecten einen Fehler ausgeben müßte. Dies tut er aber nicht! Er kann ohne Probleme connecten und bekommt unverschlüsselte Antworten

     

    Auch in Wireshark waren die Inhalte der Pakete immer lesebar, egal ob Serverseitig encryption an oder aus war.

     

    Meine Fragen:

     

    Was genau machen die Zertifikate von PC A ? Was muss ich mit dem Zertifikat von PC A auf PC B machen?  Und wo kontrolliere ich ob es richtig übertragen wurde?

     

    Habe ich die SSL-option korrekt benutzt? Oder habe ich irgendwelche Grundvorraussetzungen nicht erfüllt?

    Habe ich Wireshark richtig benutzt, in dem ich ihn von PC a laufen lies, oder muss ein dritt PC benutzt werden?

     

    Thank you for reading the whole story :)

    Mittwoch, 16. September 2009 06:09

Antworten

Alle Antworten

  • Hallo,

    zunächst müssen die Zertifikate auf dem Server (PC-A) passen,  siehe
    Verschlüsseln von Verbindungen zu SQL Server

    Dort stehen auch die Auswirkung der ForceEncryption Einstellungen:
    Wird sie beim Server eingestellt, so ist sie nicht zwingend.
    Wird sie vom Client angefragt, so ist sie optional.

    Die Aktivierung wird beschrieben in:
    Vorgehensweise: Aktivieren von verschlüsselten Verbindungen zum Datenbankmodul (SQL Server-Konfigurations-Manager).
    (Neustart des SQL Server Dienstes nicht vergessen)

    Eine detaillierte Beschreibung (Cluster Abschnitte streichen):
    http://blogs.msdn.com/jorgepc/archive/2008/02/19/enabling-certificates-for-ssl-connection-on-sql-server-2005-clustered-installation.aspx

    Was WireShark angeht: Da spielt es keine Rolle, wo Du Dich einklinkst,
    die Daten im Netzwerk müssten kryptisch aussehen.

    Gruß Elmar
    Mittwoch, 16. September 2009 07:31
    Beantworter
  • Hi Elmar,
    Danke für die schnelle Antwort. Ich bin die MS Anleitung bereits letzte Woche durchgegangen, da ich noch keine andere Idee habe wie ich das Problem lösen kann habe ich sie einfachn nochmal Schritt für Schritt durch gearbeitet. - leider ohne Erfolg - ;(

    Ich bin allerdings über eine Stelle gestollpert, die ich nicht ganz verstehe :

    Im Dokument : Verschlüsseln von Verbindungen zu SQL Server
    Überschrift : Zertifikatanforderungen
    Quote : "
    Das Zertifikat muss mithilfe der Option KeySpec von AT_KEYEXCHANGE erstellt werden. Normalerweise enthält die Schlüsselverwendungseigenschaft (KEY_USAGE ) des Zertifikats auch die Schlüsselverschlüsselung (CERT_KEY_ENCIPHERMENT_KEY_USAGE ). "

    -> Was heist diese Option KeySpec von AT_KEYEXCHANGE ?! ... ich hatte mein Zertifikat wie in der Anleitung beschrieben über die MMC -> snap-ins -> certificates -> request new certificate   erstellt. Wo finde ich dieses KeySpec ?

    Desweiteren habe ich per Hand die Zertifikate auf dem Client gelöscht, und nur auf dem Server die ForceEncryption auf YES gestellt ... ich erwartete eine Fehlermeldung als ich mit dem Client zum Server connected habe, leider passierte garnichts ...also ausser einer normalen verbindung ... das server zertifikat war auch nach der connection nicht auf dem client.-

    any idea ?!
    Mittwoch, 16. September 2009 11:45
  • Hallo,

    Wenn Du MakeCert nutzt, so muß dies bei der Erstellung angegeben werden: -sky exchange

    Zwei Anleitungen:
    http://blogs.technet.com/jhoward/archive/2005/02/02/365323.aspx
    http://blogs.microsoft.co.il/blogs/applisec/archive/2008/04/08/creating-x-509-certificates-using-makecert-exe.aspx

    Der Internet Explorer zeigt die Eigenschaften detailierter als das MMC Snap-In an
    wenn man über Extras->Internet Optionen->Inhalte->Zertifikate
    das Zertifikat  auswählt und über "Erweitert..." anzeigen läßt.

    Und wie in dem englischen Blog Artikel gezeigt muß das Zertifkat in der Registry eingetragen sein,
    und im SQL Server Protokoll beim Start ein Eintrag über das erfolgreiche Laden erscheinen.
    Eine alternative Beschreibung:  Certificate for SQL Server 2005

    Ich gebe zu, man kriegt dabei manchmal schon den Eindruck,
    die Verschlüsselei verschlüsselt sich selbst, um nicht genutzt zu werden.

    Gruß Elmar

    • Als Antwort markiert olymp012 Dienstag, 22. September 2009 06:41
    Mittwoch, 16. September 2009 14:01
    Beantworter
  • hehe, da hast du recht. hätte echt nicht gedacht, dass mich das Thema so aus der Reserve lockt :)

    ich werde erstmal die Links durcharbeiten und melde mich später nochmal ...

    auf jeden Fall schon einmal Danke  im voraus :)
    Donnerstag, 17. September 2009 06:34
  • Also,

    Es klappt - zumindest teilweise :)

    Nachdem ich mich an dieses (http://blogs.technet.com/jhoward/archive/2005/02/02/365323.aspx ) How-to gehalten habe
    funktioniert folgendes:


    Ich konnte wie beschrieben mittels makecert.exe 2 Zertifikate auf dem Server erstellen, die aufeinander aufbauen. Wenn ich jetzt ForceEncryption auf dem Server auf YES setze und mit dem Client mittels SQL-Browser (conection options: Use Encryption ) connecten will, wird die Verbindung mit dem Verweis : >> Verbindung hergestellt, aber der Handshake schlägt fehl - Fehler in Zertifikat-Kette! << abgewiesen.

    Soweit so gut....

    Ausserdem sind die Pakete zwischen Client und Server jetzt auch wirklich Verschlüsselt (mit WireShark geprüft).


    Was mir allerdings noch nicht ganz klar ist ist folgendes:

    Vorraussetzung: ForceEncryption auf dem Server ist immer auf YES

    Wenn ich vom Client auf den Server will und nicht den "use Encryption" Hacken in den Verbindungsoptionen setze stellt er die Verbindung ganz normal her.... könnte ich auch noch verstehen ..... aber wenn ich gleich danach wieder mit use Encryption mich Verbinde stellt er auch diese Verbindung her. Die erwartete HandShake Fehlermeldung bleibt also aus.

    Sie kommt erst wieder wenn ich im IE den Button "Clear SSL State" drücke. Also hat er durch die nicht Verschlüsselte Verbindung ein Zertifikat bekommen, welches er dann auch mit der use Encryption Option benutzen kann.... aber wo sehe ich dieses Zertifikat ?

    Ich habe den Vorgang nun mehrmals durchgespielt, und hatte ich die Server Zertifikate auf dem Client einmal gelöscht, wurden sie nie wieder angelegt. Aber trotzdem lief alles wie oben beschrieben.

    Die Frage ist also wo kann ich nachsehen "wie gut sich die beiden PC s gerade kennen"?
    und kann ich dem Client verbieten die Verbindung zum SQL Server herzustellen wenn er die nicht Verschlüsselte Verbindung eingeht ?
    Donnerstag, 17. September 2009 11:34
  • Hallo,

    damit die eigenerstellte Zertifikate akzeptiert werden, müssen sie auch über ein Root-Certificate
    (deutscher Bandwurm: Vertrauenswürdige Stammzertikatsstellen) verfügen, was man in dem Falle
    sich selbst ausstellt  um keinen Verisign et al. Bonus zu zahlen.
    Der andere Artikel zeigt das etwas deutlicher.

    Was das Cachen angeht: Da bin ich auch nicht gerade der Experte...
    (und vertraut dann Microsoft, das die das schon richtig machen ;-)

    Eine Beschreibung u. a. findet sich auf StackOverflow:
    http://stackoverflow.com/questions/188266/how-are-ssl-certificates-verified
    http://stackoverflow.com/questions/653097/how-to-clear-ssl-state-in-browser-when-users-session-expires

    Und offizieller Festlegen des Timeoutintervalls für den SSL-Cache

    Nur wo man die Inhalte sehen kann habe ich bis jetzt nicht finden können.

    Wie im ersten Artikel schon geschriebeN: Wenn Du ForceEncryption beim Server festlegst,
    wird eine Verschlüsselung erzwungen und ansonsten abgewiesen.
    Und solltest Du, sobald die Vertrauenskette stimmt, auch nachvollziehen können.

    Inwieweit dabei gecachte Zertifikate einbezogen werden, ist mit nicht bekannt.
    Praktisch dürfte das keine Rolle spielen, da man Zertifikate nicht im Minutentakt
    erstellt und kommerzielle Zertikate schon gar nicht ;-)

    Gruß Elmar
    Donnerstag, 17. September 2009 12:50
    Beantworter
  • ok es funktioniert nun wirklich alles, tausend dank für deine mühe :)

    Für leute mit gleichem Problem : Entscheident war bei mir, dass ich 2 zertifikate, auf dem server, mit makecert.exe gemacht habe. Die links in dem als antwort markierten post waren sehr hilfreich dabei!
    Dienstag, 22. September 2009 06:47