!!!構成ファイルの暗号化
{{category ".NET Framework",nolink}} 構成ファイル(app.config 等)内にある、接続文字列などの機密情報も通常は平文のままだが、これを暗号化する。
ASP.NET 2.0 では、web.config を暗号化できるようになった。この暗号化された情報は、ASP.NET によって、自動的に復号化されてアプリケーション内で参照できる。
そのため、開発時にロジックを組み込む必要はなく、運用サーバに配置する時点で web.config の暗号化を行うだけ対応できる。
(IIS マネージャの画面では、構成セクションの暗号化がサポートされないため、エラーとなり表示されない)
ASP.NET 用の機能ではあるが、通常の .NET Framework のアプリケーションでも利用できる。
ただし、web.config というファイル名を対象とするため、暗号化/復号化の際にはファイル名を一時的に変更が必要になる。
また、暗号化に使用されるキーはデフォルトで対象サーバの情報が使用されるため、複数のサーバで同じファイルを使用する場合は、共通のキー情報を保存し、それを使用するように設定をする必要がある。
* Encrypting Configuration Information Using Protected Configuration | Microsoft Learn
** https://learn.microsoft.com/en-us/previous-versions/aspnet/53tyfkaw(v=vs.100)
* ASP.NET IIS Registration Tool (Aspnet_regiis.exe) | Microsoft Learn
** https://learn.microsoft.com/en-us/previous-versions/k6h9cz8h(v=vs.100)
* 接続文字列と構成ファイル - ADO.NET | Microsoft Learn
** 保護された構成を使用して構成ファイルのセクションを暗号化する
** https://learn.microsoft.com/ja-jp/dotnet/framework/data/adonet/connection-strings-and-configuration-files#encrypt-configuration-file-sections-using-protected-configuration
* web.configの暗号化 | どっとねっとふぁん
** https://blogonos.wordpress.com/2006/02/23/web-config%E3%81%AE%E6%9A%97%E5%8F%B7%E5%8C%96/
!!! 対象サーバ上で暗号化を行う
対象サーバで作業できる場合は、そのサーバで暗号化の作業を行うのが簡単。
サーバのコマンドプロンプトで、下記のコマンドを実行する。
aspnet_regiis -pef "暗号化するセクション" "web.config があるフォルダ"
aspnet_regiis.exe は、下記のフォルダにある( 2.0(3.5)、4.0(4.8) および 32bit/64bit でインストールされている .NET Framework による)。
* C:\Windows\Microsoft.NET\Framework\v4.0.30319
* C:\Windows\Microsoft.NET\Framework64\v4.0.30319
* C:\Windows\Microsoft.NET\Framework\v2.0.50727
* C:\Windows\Microsoft.NET\Framework64\v2.0.50727
暗号化するセクションは、暗号化が必要な場所に合わせて、下記のように指定する。
セクション単位ごとに暗号化されるので、必要に応じて行う。また、セクションないの一部のみを行うこともできない。
* データベースへの接続:"connectionStrings"
* アプリケーション設定:"appSettings"
* smtpクライアント設定:"system.net/mailSettings/smtp"
web.config があるフォルダは、「C:\Inetpub\wwwroot\website1」のように物理的なフォルダを指定します。
asp.config (アセンブリ.exe.config) を対象にしたい場合は、一時的に web.config にリネームしてから、暗号化した後に、ファイル名を元に戻す。
また、暗号化したデータを復号化して平文に戻すことも可能で、その場合は、「-pef」オプションの代わりに「-pdf」オプションを使用する。
aspnet_regiis -pdf "暗号化したセクション" "web.config があるフォルダ"
!! 例
下記の内容の web.config ファイルが C:\Temp\website1 にあるとして、
コマンドプロンプトで、下記のようにコマンドを実行する。
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -pef "connectionStrings" C:\Temp\website1
C:\> C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -pef "connectionStrings" C:\Temp\website1
Microsoft(R) ASP.NET IIS 登録ツール バージョン 4.0.30319.0
ローカル コンピューターの ASP.NET をインストールおよびアンインストールするための管理ユーティリティです。
Copyright(C) Microsoft Corporation. All rights reserved.
構成セクションを暗号化しています...
成功しました!
これにより、下記のように connectionStrings 部分が書き換えられる。
Rsa Key
rLAK7gc8IuPRr4J25os3g3V5〜中略〜iz/3UldaFyvT/ZOnzj+zIA==
nuhXiuDuTzzGf/TTfMaNlpw3〜中略〜KmJWBwEZ8BdMjtf5euU6IA==
また、pdf オプションで、復号化し平文に戻せる
C:\> C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -pdf "connectionStrings" C:\Temp\website1
Microsoft(R) ASP.NET IIS 登録ツール バージョン 4.0.30319.0
ローカル コンピューターの ASP.NET をインストールおよびアンインストールするための管理ユーティリティです。
Copyright(C) Microsoft Corporation. All rights reserved.
構成セクションを復号化しています...
成功しました!
!!! 異なるサーバ上で暗号化を行う
対象のサーバで作業できない、複数のサーバで同じ設定を使用したい といった場合は、暗号化のためのキーを合わせる必要がある。