2016-07-19 43 views
4

Wir haben eine SQL Server 2016-Datenbank mit Always Encrypted. Unsere kürzlich veröffentlichte ASP.net Website versucht, Daten aus dieser Datenbank zu ziehen, und wenn es nicht wir diesen Fehler:Wo platziert man das Always Encrypted Certificate auf einem IIS 7.5 Webserver?

Error: Failed to decrypt column 'EnSSd'. Failed to decrypt a column encryption key using key store provider: 'MSSQL_CERTIFICATE_STORE'. The last 10 bytes of the encrypted column encryption key are: 'B8-48-B3-62-90-0B-1D-A6-7D-80'. Certificate with thumbprint '97B0D3A64CADBE86FE23559AEE2783317655FD0F' not found in certificate store 'My' in certificate location 'CurrentUser'. Verify the certificate path in the column master key definition in the database is correct, and the certificate has been imported correctly into the certificate location/store. Parameter name: masterKeyPath

Jetzt wissen wir, dass dies bedeutet, dass das Zertifikat in den richtigen nicht gesetzt worden Speicherort auf dem Server. Während der Entwicklung haben wir das Zertifikat einfach in das Zertifikate-Snap-In unter dem persönlichen Zertifikatsspeicher gelegt, und das hat funktioniert, aber jetzt, seit die Seite veröffentlicht wurde, haben wir versucht, das gleiche auf dem Webserver zu tun, aber es funktioniert nicht (wir haben es uns vorgestellt) würde nicht).

Anonyme Authentifizierung ist auf der Website aktiviert und die anonyme Benutzeridentität ist IUSR. ASP.NET-Identitätswechsel ist deaktiviert.

Wo ist der richtige Ort für das Zertifikat?

UPDATE - wir haben es geschafft, indem wir das Application Pool Identity-Konto auf das Konto, das das Zertifikat erstellt hat, geändert haben. Es war auch das Konto, das beim Hinzufügen des Zertifikats zur Liste "Aktueller Benutzer - Persönlich" auf dem Webserver verwendet wurde. Wir würden dieses Konto lieber nicht nutzen, also noch einmal, wo ist der richtige Ort, um das Zertifikat zu platzieren?

+0

Hey @RoastBeast, hast du das am Ende lösen, ich bin zu kämpfen, das selbst zum Laufen zu bringen. Ich bin aber auf IIS10 ... – AranDG

Antwort

0

Immer Verschlüsselt erfordert, dass der Benutzer, der auf die Datenbank zugreift, sowohl den öffentlichen als auch den privaten Schlüssel hat, was dazu führt, dass Sie das Konto zum Generieren des Zertifikats verwenden müssen.

Was ich normalerweise tue, ist das Zertifikat zu generieren und das Zertifikat mit einem privaten Schlüssel und sicherer Passphrase zu exportieren. Importieren Sie dann das Zertifikat mit dem Schlüssel in den persönlichen Speicher des Kontos, das Sie zum Ausführen des App-Pools verwenden. Dies kann kein generisches integriertes Konto sein und muss ein von Ihnen angegebenes Dienstkonto sein.

führen ein Powershell-Skript als Benutzer:

whoami 
COMPUTER\myIISPoolUser 
Set-Location -Path cert:\localMachine\my 
Import-PfxCertificate –FilePath c:\AlwaysEncrypt.pfx 

oder Verwendung mmc.

whoami 
COMPUTER\myIISPoolUser 
certmgr.msc 

Sie müssen auch den APP-Pool Benutzer load user profile

+0

Könnten Sie Ihrer Antwort etwas mehr Detail hinzufügen? Ich konnte mein Zertifikat als PFX-Datei exportieren, aber danach bin ich verloren. – Kevin

+0

Wie bekomme ich das Zertifikat in den App Pool-Shop? – Kevin

+0

Wenn ich certmgr starte, läuft es unter meinem Konto. Wie kann ich certmgr unter dem Konto des App-Pools ausführen lassen? – Kevin

0

IIS kann das Zertifikat nicht von den lokalen Benutzer erkennen lassen, während das Zertifikat in SQL Server erstellen, wird standardmäßig es setzen auf den lokalen Benutzerspeicher in, Führen Sie die folgenden Dinge und stellen Sie sicher, dass das Zertifikat unter dem lokalen Computer generiert -> aktuelle Benutzerzertifikatspeicher

  1. die verschlüsselten Spalten mit Standardzertifikate generieren
  2. Undo alle verschlüsselten Spalten im Klartext
  3. Gehen Sie zum Zertifikat und Schlüssel aus der Tabelle Sicherheit "Ihre DB -> Tabellen -> Sicherheit -> Immer verschlüsselte Schlüssel" und rechtsklicken Sie auf "CEK_Auto 1" -> Skript Spalte Verschlüsselungsschlüssel als -> erstellen Sie neue Fenster, halten Sie diese generierte Skript
  4. löschen CEK_Auto 1
  5. Sie den Schritt 3 für „CMK_Auto 1“ Zertifikat und löschen diese auch
  6. in der „CMK_Auto 1“ Skript das Zertifikat Pfad ändern "CurrentUser" in "LocalMachine"
  7. Sie Beispielpfad wird wie folgt sein "N'LocalMachine/my/G4452V8ERH035D2557N235B29MWR0SV834263G26 '"
  8. führen die CMK_Auto 1 und CEK_Auto 1 Skript
  9. sicherstellen, dass das Zertifikat der lokalen Computer persönliches Verzeichnis
  10. es funktionieren wird generiert, wenn nicht mit IIS Express testen, die nach wie vor Ihrem Zertifikat in lokalen Benutzern persönliches Verzeichnis
  11. Ruhe gehalten bedeuten Stellen Sie sicher, dass die "Spaltenverschlüsselungseinstellung = Aktiviert" in der Verbindungszeichenfolge hinzugefügt wurde.

Dank

John Rajesh J