machinekeyとは
machineKey 要素 (ASP.NET 設定スキーマ) | Microsoft Docs
- 主にform認証data、view(html)に出力される管理情報(state data)の暗号化、復号化、検証を行う目的で使われるkey。
- 認証用cookieやviewにおいて、改ざん防止・暗号化が可能。
machinekeyはサーバ毎に一意なのか
- サーバ毎に一意なkeyが生成される訳では無い。
- machinekeyを設定しない場合、デフォルトでアプリケーション毎に自動生成される。
- 複数台数サーバを構成する場合、アプリケーションは同一のmachinekeyを利用する必要がある。
- 同一のmachinekeyを利用するには、特定箇所でmachinekeyを指定してoverrideする必要がある。
指定可能な場所
- machinekeyを指定可能な場所は複数ある。
- machine.config
- ホスト内の全アプリケーションに適用される。
- web.config
- ホスト内のアプリケーション毎に適用される。
- web.configで既存のkeyを上書きすることが可能。
- System.web entryの下でmachinekeyを指定可能。
- How To: Configure MachineKey in ASP.NET 2.0 | Microsoft Docs
- machine.config
セキュリティ面を考慮して
- machinekeyが変更されると、例えば認証cookieが失敗し、セッション状態が破棄される為、それを防ぐために自動生成されないようmachinekeyを事前に指定しておくことが必要である。
- form認証だと
<forms protection="None" />
にしない限り(デフォルトで)web.configで検証・暗号化を行うようになっている。- All: 検証+暗号化
- Encryption: 暗号化のみ有効化
- Validation: 検証のみ有効化
- None: 無効化
- form認証だと
- view state contentsの改ざんを防止する為、hash化されたmessage認証code(HMAC)が生成され、hashは後続のrequestで比較される。
- 各環境で同じmachinekeyを利用している場合、stagingで例えば認証cookieを発行後、productionにて同一認証cookieを利用してアクセスすることによってdecryptが可能である (不正アクセスが可能)。
- セキュリティ面から各環境で異なるmachinekeyを利用し、且つ設定はweb.configでアプリケーション毎に適用した方が良い。
C¥Program data¥Microsoft¥RSA¥machinekey
が自動生成され続ける(3kb*x files)問題
- machinekeyフォルダには、machineとclient両方の証明書ペアキーが格納されている。
- machineに対し証明書requestが生成されるたびに、新しいmachinekeyがこの場所に作成される。
- 証明書requestが失敗した場合でも、当てはまる。
- マシンにセキュリティソフトウェアがインストールされており、当該ソフトウェアがSSL検査の過程で大量の(不要な)SSL証明書を発行する可能性がある。
- DriveAnalyzer, ProcessMonitor, ResourceMonitor等でどのプロセスがmachinekeyを触っているのか確認する。