2016-07-19 5 views
4

私たちには、常に暗号化されたSQL Server 2016データベースがあります。私たちの最近発表されたASP.netのWebサイトには、このデータベースからデータを取得しようとすると、それがないとき、私たちは、このエラーを取得:どこにIIS 7.5 Webサーバーに常に暗号化された証明書が置かれますか?

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

今、私たちは、この証明書が適切に配置されていないことを意味していることを知っていますサーバー上の場所。開発中に、個人証明書ストアの下の証明書スナップインに証明書を置き、それがうまくいきましたが、サイトが公開されたので、Webサーバーで同じことを試みましたが、機能しませんでしたないだろう)。

匿名認証がサイトで有効になっており、匿名ユーザーIDがIUSRです。 ASP.NET偽装は無効になっています。

証明書を置く適切な場所はどこですか?


更新 - 私たちは、アプリケーションプールIDアカウントを証明書を作成したアカウントに変更することによって動作させました。また、Webサーバー上のCurrent User-Personalリストに証明書を追加するときに使用されたアカウントでした。私たちはこのアカウントを使いたくないので、証明書を置くための適切な場所はどこですか?

+0

@RoastBeastねえ、あなたは最終的にこれを解決でしたが、私はこれは自分自身を働いてもらうのに苦労しています。私はIIS10にありますが... – AranDG

答えて

0

常に暗号化するには、データベースにアクセスしているユーザーが公開キーと秘密キーの両方を持つ必要があります。このキーを持つようにアカウントを使用して証明書を生成する必要があります。

私が通常行うことは、証明書を生成し、秘密鍵と安全なパスフレーズで証明書をエクスポートすることです。次に、キー付き証明書を、アプリケーションプールを実行するために使用するアカウントの個人ストアにインポートします。これは一般的な統合アカウントではなく、指定したサービスアカウントでなければなりません。

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

またはMMCを使用します。

はユーザーとしてPowerShellスクリプトを実行します。

whoami 
COMPUTER\myIISPoolUser 
certmgr.msc 

また、SQLサーバーに証明書を作成しながら、APPプールユーザーload user profile

+0

あなたの答えにいくつかの詳細を追加できますか?証明書をPFXファイルとしてエクスポートできましたが、それ以降は失われてしまいます。 – Kevin

+0

証明書をApp Poolの店舗に持ち込むにはどうすればいいですか? – Kevin

+0

certmgrを実行すると、アカウントで実行されています。 certmgrをApp Poolのアカウントで実行させるにはどうすればよいですか? – Kevin

0

IISは、それがローカルユーザーストアに入れているデフォルトでは、ローカルユーザーからの証明書を認識することはできませんできるようにする必要があります次のことを行うと、ローカルマシンの下で生成された証明書を確認してください - デフォルトの証明書と暗号化された列

  • [元に戻す]を生成

    1. >現在のユーザーの証明書ストアすべての暗号化された列をプレーンテキストに変換する
    2. テーブルセキュリティ "Your DB - > Tables - > Security - > Always Encrypted Keys"の証明書とキーに移動し、 "CEK_Auto 1" - > Script Column Encryption Keyを - > [証明書のパスを変更CEK_Auto 1
    3. 「CMK_Auto 1」証明書の手順3を実行してくださいを削除しておくと、新しいウィンドウに、この生成されたスクリプト
    4. を作成し、「CMK_Auto 1」スクリプトでこのようも
    5. を削除"CurrentUser" in "LocalMachine"
    6. パスの例は次のようになります。 "N'LocalMachine/my/G4452V8ERH035D2557N235B29MWR0SV834263G26 '"
    7. はCMK_Auto 1を実行し、CEK_Auto 1スクリプト
    8. IISでテストされていない場合、証明書はローカルマシンの個人ディレクトリ
    9. を生成し、それが動作することを確認してくださいそれはまだあなたの証明書
    10. ローカルユーザー個人のディレクトリで開催された残りの部分を意味し、表現します接続文字列に "Column Encryption Setting = Enabled"が追加されていることを確認してください。

    おかげ

    ジョンラジェッシュJ

  • 関連する問題