NDW

アプリ開発やトラブルシューティング等のノウハウ、キャンプや登山の紹介や体験談など。

1. システムエンジニアリング IIS SSL/TLS/PKI 基盤技術

自己署名クライアント証明書の作成とIIS認証設定

投稿日:

概要

クライアント証明書の作成

PowerShellを使って自己署名クライアント証明書を作成し、後の手順でクライアント証明書をインポートできるようCER形式でエクスポートします。

  • 実行ユーザの権限でPowerShellを起動し、次を実行します。
    $client= New-SelfSignedCertificate `
      -Subject "CN=myexample, E=myexample@example.com" `
      -NotAfter $(Get-Date).AddDays(3650) `
      -CertStoreLocation cert:\CurrentUser\My `
      -TextExtension @( `
        "2.5.29.37={text}1.3.6.1.5.5.7.3.2", `
        "2.5.29.17={text}upn=myexample@example.com" `
       )
    
    Export-Certificate -Cert $client -FilePath myexample.cer
    
    • サブジェクト(-Subject)にユーザを識別するための情報(ユーザ名やメールアドレス等)を指定します。メールアドレスのみであれば、”-Subject test@example.com”のような指定も可能です。
    • 有効期限(-NotAfter)は10年としています
    • クライアント証明書認証時、「現在のユーザ」の「個人」ストアに登録されたクライアント証明書が使用されるため、保存先(-CertStoreLocation)としてこのストアを指定しています。
    • 証明書の拡張情報(-TextExtension)として次を設定しています。
      • 「拡張キー使用法」(Enhanced Key Usage: 2.5.29.37)として「クライアント認証 (1.3.6.1.5.5.7.3.2)」を指定しています。
      • サブジェクト代替名(2.5.29.17)としてUPNを指定しています。
      • 拡張キー使用法やサブジェクト代替名で指定できるOIDは、New-SelfSignedCertificateのリファレンスの”-TextExtension”オプションの説明をご覧ください。
    • コマンドのリファレンス

    IISの設定変更

    自己署名クライアント証明書を使った認証を行えるようIISの設定を行います。
    これだけだと自己署名クライアント証明書の検証に失敗するので、信頼されたルート証明書に自己署名クライアント証明書を追加します。

    1. IISの構成ファイルを変更します。
      “(ソリューション名)\.vs\(プロジェクト名)\config”フォルダのapplicationhost.configを開き、sslFlags属性を修正します。必要であれば編集前にバックアップファイルを作成してください。
      ...
      <configuration>
        ...
        <system.webServer>
          ..
          <security>
            <!-- <access sslFlags="None" /> -->
            <access sslFlags="SslNegotiateCert" />
            ...
      
      • この例では、クライアント証明書の提出を任意にするためのSslNegotiateCertを指定しています。
      • sslFlagsで指定可能な値はリファレンスをご覧ください。
    2. 信頼されたルート証明機関にクライアント証明書を追加します。
      • 自己署名クライアント証明書は、信頼されたルート証明書で署名されていないので、IISによるクライアント証明書の検証でエラーになってしまいます。
        HTTP Error 403.16 – Forbidden
        クライアント証明書が信頼されていないか、または無効である可能性があります。
      • この問題を回避するために、管理者権限のPowerShellで次を実行します。
        (IISはローカルコンピュータの「信頼されたルート証明機関」を参照しているため、管理者権限のPowerShellを使用します。)
        Import-Certificate `
          -FilePath myexample.cer -CertStoreLocation Cert:\LocalMachine\Root
        

    動作確認

    Visual StudioにてWebアプリをデバッグ実行します。
    起動されたブラウザの画面でクライアント証明書を選択する画面が表示されます。
    なお、別のブラウザウインドウが存在していると、過去に選択されたクライアント証明書の情報が残ってしまい、クライアント証明書の選択画面が表示されない場合があります。そのため、動作確認で使用するブラウザはプライベートで起動することをお薦めします。







-1. システムエンジニアリング, IIS, SSL/TLS/PKI, 基盤技術

関連記事

ASP.NET Core: 日本語の文字化け

ダイジェスト Visual Studio 2019で作成したASP.NET Coreプロジェクトで、プログラム(Razor)から日本語を出力するとHTMLエンコードされてしまいます。例えば「さしすせそ …

Javaでのパスワード付きzipファイルの圧縮/解凍方法(ZipCrypto/AES)

先日、JavaでのZIP暗号化の考察という記事を書きましたが、zip4jのメンテナンスが再開されており、バージョン2系が公開されていましたので、これを使って通常のzip圧縮/解凍、パスワード付きzip …

パスワード情報の保管方式の比較

Webアプリの開発でパスワードを使ったユーザ認証を設計・実装する機会がよくある。 後輩への説明や勉強会ネタとして、この辺の話を纏めてみようと思う。 概要 オンラインバンキングやネットショッピングのサイ …

WindowsにApacheを構築

アプリケーション開発環境として主にWindowsを使っています。 開発時の検証で使用するミドルウェアがApacheを使用することが多いので、ここでは開発環境であるWindowsにApacheを構築する …

Logicool MX Keys(KX800)でキー入力が遅延する

事象 次のようにデスクトップPC(Windows10)にUSBレシーバ+MX Keys(KX800)環境で、キー入力が遅延する事象が時々発生します。 ミリ秒レベルの若干の入力遅延がある。入力できないわ …