トップ 履歴 一覧 カテゴリ ソース 検索 ヘルプ RSS ログイン

DotNet/EncryptConfiguration

INDEX

構成ファイルの暗号化

構成ファイル(app.config 等)内にある、接続文字列などの機密情報も通常は平文のままだが、これを暗号化する。

ASP.NET 2.0 では、web.config を暗号化できるようになった。この暗号化された情報は、ASP.NET によって、自動的に復号化されてアプリケーション内で参照できる。そのため、開発時にロジックを組み込む必要はなく、運用サーバに配置する時点で web.config の暗号化を行うだけ対応できる。(IIS マネージャの画面では、構成セクションの暗号化がサポートされないため、エラーとなり表示されない)

ASP.NET 用の機能ではあるが、通常の .NET Framework のアプリケーションでも利用できる。ただし、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へ。