IISの制御ファイルであるweb.config
にはDB接続情報などが平文のまま格納されていますので、流出しないように注意する必要があります。
この問題を回避するためにMicrosoftからaspnet_regiis
という暗号化ツールが提供されています。
aspnet_regiisとは何か
aspnet_regiisは.NET Frameworkに同梱されているツールで、主にASP.NETをIISに登録するためのツールですが、web.configファイルを暗号化する機能もあります。
aspnet_regiis格納場所
.NET Frameworkの各バージョンのフォルダにあります。
バージョン | 格納場所 |
---|---|
1 | %windir%.NET\Framework\v1.0.3705 |
1.1 | %windir%\Microsoft.NET\Framework\v1.1.4322 |
2.0(32ビット) | %windir%\Microsoft.NET\Framework\v2.0.50727 |
2.0(64ビット) | %windir%\Microsoft.NET\Framework64\v2.0.50727 |
4(32ビット) | %windir%\Microsoft.NET\Framework\v4.0.30319 |
4(64ビット) | %windir%\Microsoft.NET\Framework64\v4.0.30319 |
※ 3.0と3.5には同梱されていないので他のバージョンのaspnet_regiisを使うこと |
aspnet_regiisの使い方
aspnet_regiis -pef "<暗号化したいセクション>" "<web.configのあるフォルダパス>"
例)C:\Inetpub\wwwroot\web.configのconnectionStringsを暗号化したい場合
aspnet_regiis -pef "connectionStrings" "C:\Inetpub\wwwroot\web.config"
下層のセクションを指定したい場合はsystem.web/machineKey
のように「/
」区切りで指定します。
複合化するにはオプションを-pef
から-pdf
に変更するだけです。
うまく動かなかった例
windows server 2016環境でDomain Adminsグループに所属するユーザで暗号化を行ったところ、こんなエラーが出ました。
Microsoft(R) ASP.NET IIS 登録ツール バージョン 4.0.30319.0
ローカル コンピューターの ASP.NET をインストールおよびアンインストールするための管理ユーティリティです。
Copyright(C) Microsoft Corporation. All rights reserved.
構成セクションを暗号化しています...
connectionStrings のための構成セクション ハンドラーを実行中にエラーが発生しました。
プロバイダー 'RsaProtectedConfigurationProvider' を使用してセクション 'connectionStrings' を暗号化することができませんでした。プロバイダーからのエラー メッセージ: オブジェクトは既にあります。
失敗しました!
解決方法はなんてことはない、コマンドプロンプトを「管理者として実行」すればよかっただけでした。
※日本語で「オブジェクトは既にあります」をweb検索しても全然ヒットせず、UIを英語に変えて表示されるエラーメッセージ「Object already exists.」で検索したらすぐ見つかりました。
Stack Overflow
参照URL
ASP.NET IIS 登録ツール (Aspnet_regiis.exe)
https://msdn.microsoft.com/ja-jp/library/k6h9cz8h(v=vs.100).aspx