my syntax suger

i have an unbeknown dictionary. everything is up to me.

machinekeyについて

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

セキュリティ面を考慮して

  • machinekeyが変更されると、例えば認証cookieが失敗し、セッション状態が破棄される為、それを防ぐために自動生成されないようmachinekeyを事前に指定しておくことが必要である。
    • form認証だと <forms protection="None" /> にしない限り(デフォルトで)web.configで検証・暗号化を行うようになっている。
      • All: 検証+暗号化
      • Encryption: 暗号化のみ有効化
      • Validation: 検証のみ有効化
      • None: 無効化
  • 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を触っているのか確認する。

f:id:hrt0kmt:20190318224733p:plain