Freigeben über


Konfigurieren eines Zertifikats zur Verwendung durch SSL

Systemeigene XML-Webdienste sind als veraltet markiert. Diese Funktion wird in zukünftigen Versionen von Microsoft SQL Server nicht mehr bereitgestellt. Verwenden Sie diese Funktion beim Entwickeln neuer Anwendungen nicht, und planen Sie das Ändern von Anwendungen, in denen es zurzeit verwendet wird.

Für die SSL-Kommunikation (Secure Sockets Layer) muss ein HTTP-Server über ein Zertifikat verfügen, das für jeden Socket (Kombination aus IP-Adresse und Anschluss) registriert ist, den er zum Verwenden mit SSL aktiviert. Die Zertifikate müssen zur Serverauthentifizierung berechtigt sein. Dazu können Sie entweder ein SSL-Zertifikat von einer Zertifizierungsstelle wie z. B. Verisign abrufen oder – wenn es lediglich für Testzwecke vorgesehen ist – mithilfe von Tools selbst ein Zertifikat ausstellen und erstellen.

Unabhängig davon, ob das Zertifikat von einer Zertifizierungsstelle abgerufen oder selbst erstellt wurde, muss es beim Server registriert sein. Zum Registrieren, Abfragen und Löschen von SSL-Zertifikaten wird das Verwenden des HTTP-Konfigurierungshilfsprogramms (HttpCfg.exe) empfohlen.

Registrieren von SSL-Zertifikaten

Zum Registrieren eines Zertifikats verwenden Sie folgenden Befehl:

httpcfg set ssl /iIP:Port**/hHash/g**Guid

Argumente

  • IP:Port
    Kombination aus IP-Adresse und Anschluss, für die Sie das Zertifikat registrieren.

  • Hash
    Zertifikat-Hash.

    HinweisHinweis

    Der Zertifikat-Hash kann vom Zertifikatspeicher abgerufen werden. Es kann durch das Zertifikate-Snap-In oder durch ein Befehlszeilentool wie z. B. CertUtil angezeigt werden.

  • Guid
    GUID-Zeichenfolge zur Identifizierung der Entität, die das Zertifikat registriert. Als bewährte Methode (Best Practice) wird empfohlen, einen GUID für jede Instanz von SQL Server zu erstellen und denselben GUID für alle Zertifikatregistrierungen zu verwenden, die durch diese Instanz erfolgen.

Die Registrierung eines SSL-Zertifikats für eine IP:Port-Kombination wirkt sich auf alle Anwendungen aus, die auf dieser IP:Port-Kombination lauschen. Wenn beispielsweise sowohl die Instanz von SQL Server als auch eine weitere Anwendung, wie z. B. IIS, dieselbe IP:Port-Kombination (10.0.0.1:80) überwachen, dann wirkt sich die Registrierung eines SSL-Zertifikats für 10.0.0.1:80 durch die Instanz von SQL Server auch auf IIS aus. Für IIS und die Instanz von SQL Server muss dann dasselbe Zertifikat freigegeben werden. Dies ist eine Einschränkung des Kernel-Modus-HTTP-Treibers (Http.sys). Wenn Http.sys eine Anforderung an der IP:Port-Kombination 10.0.0.1:80 erhält, kann aufgrund der Verschlüsselung der Anforderung die URL nicht analysiert und somit nicht bestimmt werden, ob die Anforderung zu SQL Server oder zu IIS gehört. Erst https.sys kann die Anforderung weiterleiten, nachdem sie entschlüsselt wurde. Https.sys kann deshalb für unterschiedliche Anwendungen, die dieselbe IP:Port-Kombination überwachen, keine unterschiedlichen SSL-Zertifikate verwenden.

Wenn SQL Server unter Windows Vista (oder einer entsprechenden Windows Server-Version) ausgeführt wird, muss das Zertifikat ggf. für die lokale IP-Adresse (IPv4: 127.0.0.1 oder IPv6: [::1]) sowie für die externe IP-Adresse des Computers speziell registriert werden, um die "localhost"-Verbindung über SSL zu gewährleisten. Alternativ können Sie beim Registrieren des SSL-Zertifikats die nicht angegebene Adresse (IPv4: 0.0.0.0 oder IPv6: [::]) angeben. Windows Vista stellt mittlerweile statt des httpcfg.exe-Tools außerdem ein integriertes Tool zur Verwaltung der SSL-Zertifikatregistrierungen zur Verfügung. Der neue Befehl lautet wie folgt:

netsh http add sslcert ipport=IP:Port certhash=Hash appid=Guid

Beispiel:

netsh http add sslcert ipport=[::]:443 certhash=<hash> appid=<guid>Examples

Das folgende Beispiel registriert ein Zertifikat:

httpcfg set ssl /i 10.0.0.1:80 /h 2c8bfddf59a4a51a2a5b6186c22473108295624d 
/g "{2bb50d9c-7f6a-4d6f-873d-5aee7fb43290}"

Abfragen von Zertifikaten

Zum Anzeigen aller registrierten Zertifikate verwenden Sie folgenden Befehl:

httpcfg query ssl

Um ein einzelnes Zertifikat anzuzeigen, verwenden Sie die Option /i:

httpcfg query ssl /iIP:Port

Argumente

  • IP:Port
    Kombination aus IP-Adresse und Anschluss, für die Sie das Zertifikat abfragen.

Beispiel

httpcfg query ssl 
httpcfg query ssl /I 10.0.0.1:80

Löschen von SSL-Zertifikaten

Zum Löschen eines Zertifikats verwenden Sie die Option /i folgendermaßen:

httpcfg delete ssl /iIP:Port

Argumente

  • IP:Port
    Kombination aus IP-Adresse und Anschluss, für die Sie das Zertifikat löschen.

Beispiel

httpcfg delete ssl /i 10.0.0.1:80

Abrufen von Zertifikaten

Sie können die von SQL Server zur SSL-Kommunikation benötigten Zertifikate mithilfe von internetbasierten Clients von einer Zertifizierungsstelle wie z. B. Verisign abrufen.

Für Testzwecke können Sie jedoch auch selbst ein Testzertifikat erstellen, wozu das Tool MakeCert.exe verwendet wird. MakeCert.exe ist Bestandteil des .NET Framework SDK. MakeCert.exe ist auch im Plattform-SDK verfügbar. Sie können die SDKs vom Microsoft .NET Framework Developer Center bzw. vom Microsoft Download Centerherunterladen. MakeCert.exe erstellt ein X.509-Zertifikat. Es erstellt ein Paar aus einem privaten und einem öffentlichen Schlüssel für digitale Signaturen und speichert dieses in einer Zertifikatdatei. Dieses Tool ordnet das Schlüsselpaar auch einem bestimmten Verleger zu und erstellt ein X.509-Zertifikat, das einen vom Benutzer angegebenen Namen an den öffentlichen Teil des Schlüsselpaars bindet.

Zum Erstellen eines SSL-Zertifikats, das auf einen Hostnamen (MySQLServer) reagiert, können Sie MakeCert mit den folgenden Optionen ausführen:

makecert -r -pe -nCN="MySQLServer**"-eku1.3.6.1.5.5.7.3.1-ssmy-srlocalmachine**

-skyexchange-sp"Microsoft RSA SChannel Cryptographic Provider"-sy12

Befehlszeilenoptionen

  • -r
    Erstellt ein selbstsigniertes Zertifikat. Ein selbstsigniertes Zertifikat ist ein Zertifikat, das nicht durch eine Zertifizierungsstelle signiert wurde. Da es nicht durch eine Zertifizierungsstelle signiert wurde, kann es zwar zu der für SSL benötigten Verschlüsselung verwendet werden, nicht jedoch zur Serverauthentifizierung.

  • -n
    Gibt den Servernamen an. Dieser Name muss dem X.500-Standard entsprechen. Die einfachste Methode ist die Angabe des Namens in doppelten Anführungszeichen im Anschluss an CN=.

  • -eku
    Gibt im Zertifikat eine durch Trennzeichen getrennte Liste von erweiterten Schlüsselnutzungs-Objektbezeichnern (OIDs, Object Identifiers) an. Für SQL Server ist ein für die Serverauthentifizierung gültiges SSL-Zertifikat erforderlich, das einen Objektbezeichner (OID) von 1.3.6.1.5.5.7.3.1 (szOID_PKIX_KP_SERVER_AUTH) hat.

  • -ss
    Gibt den Zertifikatspeicher an, in dem das erstellte Zertifikat gespeichert wird. Das Speichern im my-Speicher wird empfohlen, obwohl die Speicherung auch an jeder anderen Stelle innerhalb des Zertifikatspeichers erfolgen kann.

  • -sr
    Gibt den Zertifikatspeicher an, in dem sich das Zertifikat befindet. Der Speicherort kann entweder currentuser (Standardvorgabe) oder localmachine sein. Da dieses Zertifikat für einen Dienst erstellt wird, sollte es im lokalen Computer gespeichert werden.

  • -sky
    Gibt den Zertifikatschlüsseltyp an. Dieser muss signature, exchange oder eine ganze Zahl wie z. B. 4 sein. Für den RSA-Algorithmus zum Austausch öffentlicher Schlüssel ist hier exchange erforderlich. Dieser Schlüsseltyp wird zum Verschlüsseln und Entschlüsseln von Sitzungsschlüsseln verwendet.

  • -sp
    Gibt den Namen des CryptoAPI-Anbieters an. Bei Zertifikaten, die für SQL Server erstellt werden, kann dieser Name auf Microsoft RSA SChannel Cryptographic Provider gesetzt werden.

  • -sy
    Gibt den Typ des CryptoAPI-Anbieters an. Wenn der Anbieter Microsoft RSA SChannel Cryptographic Provider ist, so ist der Typ 12.

Zusätzliche Befehlszeilenoptionen

  • -b
    Datumswert im Format mm/tt/jjjj, der den Beginn der Gültigkeitsdauer des Zertifikats angibt. Der Standardwert für diese Option ist das Erstellungsdatum des Zertifikats.

  • -e
    Datumswert im Format mm/tt/jjjj, der das Ende der Gültigkeitsdauer des Zertifikats angibt. Sofern nicht anders festgelegt, lautet der Standardwert für diese Option 12/31/2039 11:59:59 GMT.

Beispiele:

Das folgende Beispiel zeigt das Erstellen eines Zertifikats mithilfe von MakeCert und mithilfe der zusätzlichen Optionen.

makecert -r -pe -n "CN= MySQLServerName" -b 01/01/2000 -e 01/01/2036 
    -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localMachine -sky exchange 
    -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12

Nach dem Erstellen des Zertifikats können Sie dessen Hash vom MMC des Zertifikats abrufen, oder Sie verwenden dazu ein Tool wie z. B. CertUtil. Durch Verwendung von CertUtil können Sie das gerade erstellte Zertifikat auflisten.

C:\>certutil -store "my" "MySQLServerName"

================ Certificate 2 ================
Serial Number: e302d3a7a831c9884c0dd736f24825e6
Issuer: CN=MySQLServerName
Subject: CN=MySQLServerName
Signature matches Public Key
Root Certificate: Subject matches Issuer
Cert Hash(sha1): d2 2f 9a 7f 18 cb ed 13 a1 3e be e5 32 69 6c 4b ad ba b9 30
  Key Container = 956cbc46-f005-4aeb-b521-7c313f2ccd10
  Provider = Microsoft RSA SChannel Cryptographic Provider
Encryption test passed
CertUtil: -store command completed successfully.

Der mithilfe von CertUtil aus den Ergebnissen abgerufene Hash kann an das Tool Httpcfg.exe übergeben werden, um das selbstsignierte Zertifikat zu registrieren.

Überprüfen Sie vor der Verwendung von MakeCert zum Erstellen eines selbstsignierten SSL-Zertifikats und vor dessen Registrierung mit Http.sys, ob auf dem Computer bereits IIS installiert ist. IIS enthält einen Assistenten, der das Registrieren von SSL-Zertifikaten vereinfacht. Wenn IIS bereits auf dem Computer installiert ist, wurde womöglich bereits ein SSL-Zertifikat mit Http.sys registriert. Wenn das nicht der Fall ist, können Sie den IIS-Assistenten zum Erstellen und Registrieren des Zertifikats verwenden.

Da sich SSL-Zertifikate auf den gesamten Computer auswirken, ist es nicht wichtig, dass IIS zum Registrieren eines zur Nutzung durch SQL Server vorgesehenen Zertifikats verwendet wird.

Weitere Überlegungen

  • Wenn Sie eine Instanz von SQL Server deinstallieren, bleiben alle durch Httpcfg.exe erstellten SSL-Zertifikatbindungen bestehen, sofern sie nicht manuell gelöscht werden. Da diese Einstellungen nicht beim Setup von SQL Server erstellt wurden, werden Sie auch nicht bei dessen Deinstallation entfernt. Deshalb müssen derartige Bindungen beim Deinstallieren einer Instanz von SQL Server ebenfalls entfernt werden.

  • Obwohl die Verwendung von SSL über HTTP mit SQL Server IIS nicht voraussetzt, wird der HTTP SSL-Dienst mit der IIS-Nutzung verknüpft, wenn IIS parallel zu einer Instanz von SQL Server installiert ist. Beispiel: Wenn Sie IIS anhalten (z. B. durch Verwendung von net stop iisadmin an einer Eingabeaufforderung), wird zusammen mit IIS auch der HTTP SSL-Dienst angehalten. Außerdem ist es nach der Installation von IIS unter Windows nicht möglich, den HTTP SSL-Dienst zu starten, ohne gleichzeitig IIS zu starten (Inetinfo.exe).