22

SSL クライアント証明書を要求するように IIS Web サイトを構成しようとしています。Web サイトは IIS 6 と 7 の両方でセットアップされていますが、私は IIS 7 で動作させることにもっと関心があります。ベースのクライアントはアクセスに問題があります。

問題は、最初の SSL ハンドシェイク中に IIS がクライアント証明書を要求しないことだと思います。代わりに、通常の SSL 接続をネゴシエートし、リソースがクライアント証明書を必要とするかどうかを確認し、必要な場合は、クライアント証明書を要求する新しい SSL ハンドシェイクを開始します。IIS がこれを行うのは、特定のリソースのクライアント証明書のみを必要とするサイトをサポートするためです。Web サイト全体に対して要件が指定されている場合でも、IIS は 2 つの SSL ハンドシェイクを開始します。IIS が最初の SSL ハンドシェイクでクライアント証明書を要求するように強制したいと考えています。(クライアントは外部パートナーによって開発されており、セットアップ方法やソース コードへのアクセス権はほとんどありません)

以前に IIS でこの問題に対処した人はいますか?

4

2 に答える 2

13

IIS 7.5でこれを行った方法は次のとおりです。

  1. 管理者コマンド プロンプトで次を実行します。netsh http show sslcert
  2. 出力をテキスト ファイルに保存します。次のようになります。

    IP:port                 : 0.0.0.0:443
    Certificate Hash        : [a hash value]
    Application ID          : {[a GUID]}
    Certificate Store Name  : MY
    Verify Client Certificate Revocation    : Enabled
    Verify Revocation Using Cached Client Certificate Only    : Disabled
    Usage Check    : Enabled
    Revocation Freshness Time : 0
    URL Retrieval Timeout   : 0
    Ctl Identifier          : (null)
    Ctl Store Name          : (null)
    DS Mapper Usage    : Disabled
    Negotiate Client Certificate    : Disabled
    
  3. その情報を使用してバッチ ファイルを作成します。

    netsh http show sslcert
    netsh http delete sslcert ipport=0.0.0.0:443
    netsh http add sslcert ipport=0.0.0.0:443 certhash=[your cert hash from above] appid={[your GUID from above]} certstorename=MY verifyclientcertrevocation=enable VerifyRevocationWithCachedClientCertOnly=disable UsageCheck=Enable clientcertnegotiation=enable
    netsh http show sslcert
    

    (はい、削除して再度追加する必要があります。clientcertnegotiation をその場で変更することはできません。そのため、ハッシュと GUID を保存することが重要であり、何を再追加する必要があるかがわかります。)

  4. そのバッチ ファイルを実行し、エラーがないか確認して完了です。

この設定はサーバーごとではなく、証明書ごとに適用されることに注意してください。したがって、複数の証明書を使用する場合、または証明書を変更/更新する場合は、これを再度行う必要があります。

于 2013-08-15T10:41:16.217 に答える
7

このメタベース設定を見つけるのにしばらく時間がかかりました。新しい certicom ライブラリを使用しているクライアントでも、これと同じ問題が発生していました。SSL 再ネゴシエーションに関する MITM 攻撃が発見されて以来、多くのサークルでの答えは、再ネゴシエーション リクエストをハングアップすることでした。

\inetpub\adminscripts から次のコマンドを実行すると、IIS は常にクライアント証明書を要求するようになります。

IIS 6 の場合: cscript adsutil.vbs set \w3svc\siteID\SSLAlwaysNegoClientCert True

(したがって、既定の Web サイトの場合、cscript adsutil.vbs は \w3svc\1\SSLAlwaysNegoClientCert True を設定します)

一部のクライアントのInternet Explorerは、クライアント証明書が必要かどうかにかかわらず、パケットを受信したときにクライアント証明書を要求することに注意してください。

IIS 7 の場合:

次のテキストを「Enable_SSL_Renegotiate_Workaround.js」というファイルに保存します。

var vdirObj=GetObject("IIS://localhost/W3svc/1"); 
// replace 1 on this line with the number of the web site you wish to configure 

WScript.Echo("Value of SSLAlwaysNegoClientCert Before: " + vdirObj.SSLAlwaysNegoClientCert); 
vdirObj.Put("SSLAlwaysNegoClientCert", true); 
vdirObj.SetInfo(); 
WScript.Echo("Value of SSLAlwaysNegoClientCert After: " + vdirObj.SSLAlwaysNegoClientCert);

管理者特権/管理者コマンド プロンプトから次のコマンドを実行します。

cscript.exe enable_ssl_renegotiate_workaround.js

(977377 の KB 記事から抜粋)

于 2010-07-09T12:19:57.420 に答える