構成ファイルの暗号化
構成ファイル(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
- ASP.NET IIS Registration Tool (Aspnet_regiis.exe) | Microsoft Learn
- 接続文字列と構成ファイル - ADO.NET | Microsoft Learn
- web.configの暗号化 | どっとねっとふぁん
対象サーバ上で暗号化を行う
対象サーバで作業できる場合は、そのサーバで暗号化の作業を行うのが簡単。
サーバのコマンドプロンプトで、下記のコマンドを実行する。
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 にあるとして、
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<add name="LocalServer"
connectionString="Server=サーバ名;User Id=ユーザID;Password=パスワード;Database=データベース名;"
providerName="System.Data.SqlClient"/>
</connectionStrings>
<appSettings>
<add key="設定1" value="設定値1" />
<add key="設定2" value="設定値2" />
<add key="設定3" value="設定値3" />
</appSettings>
</configuration>
コマンドプロンプトで、下記のようにコマンドを実行する。
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 部分が書き換えられる。
<?xml version="1.0"?>
<configuration>
<connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
<EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc" />
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p" />
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<KeyName>Rsa Key</KeyName>
</KeyInfo>
<CipherData>
<CipherValue>rLAK7gc8IuPRr4J25os3g3V5〜中略〜iz/3UldaFyvT/ZOnzj+zIA==</CipherValue>
</CipherData>
</EncryptedKey>
</KeyInfo>
<CipherData>
<CipherValue>nuhXiuDuTzzGf/TTfMaNlpw3〜中略〜KmJWBwEZ8BdMjtf5euU6IA==</CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>
<appSettings>
<add key="設定1" value="設定値1" />
<add key="設定2" value="設定値2" />
<add key="設定3" value="設定値3" />
</appSettings>
</configuration>
また、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. 構成セクションを復号化しています... 成功しました!
異なるサーバ上で暗号化を行う
対象のサーバで作業できない、複数のサーバで同じ設定を使用したい といった場合は、暗号化のためのキーを合わせる必要がある。
最終更新時間:2026年03月08日 19時01分59秒 指摘や意見などあればSandBoxのBBSへ。