2011-10-30 6 views
2

注:私は自分自身の質問に答えるつもりです...ちょうどこの楽しいことをインターネットの集団的知恵に加えたいと思っていました。APRを使用していて、すべてのWeb配置でCLIENT-CERT認証を使用していない場合、JBoss 5.1.0.GAでクライアント証明書認証を取得するにはどうすればよいですか?

私は成功し、主にこのページの情報の助けを借りて、私のJBoss 5.1.0.GAサーバー上の証明書認証を設定した:doesnの私は1つのコンテキスト(のは/openContextそれを呼びましょう)を持っているhttp://docs.jboss.org/jbossas/jboss4guide/r1/html/ch8.chapter.html

クライアント証明書認証が必要な(つまり、web.xmlでCLIENT-CERTを使用するように設定されている)別のコンテキスト(/securedContextと呼ぶ)を必要とします。 JBossのデフォルトWebコネクタを使用する場合、これはうまく動作します。私はhttp://myhost/openContextを打つことができ、私は証明書を要求されませんが、http://myhost/securedContextを押すと、期待通りのクライアント証明書の入力が求められます。

ただし、JBossWeb Nativeをインストールして、WebコネクタとしてAPRを使用すると、http://myhost/securedContextにヒットしたときに証明書の入力を求められなくなりました。 server.xml

私の4月のコネクタの設定は次のようになります。

<Connector protocol="HTTP/1.1" SSLEnabled="true" 
    port="8443" address="${jboss.bind.address}" 
    scheme="https" secure="true" clientAuth="false" 
    SSLProtocol="SSLv3+TLSv1" 
    SSLCipherSuite="ALL:!ADH:!SSLv2:!EXPORT40:!EXP:!LOW" 
    SSLRandomSeed="/dev/urandom" 
    SSLCertificateFile="/etc/pki/tls/certs/mycert.crt" 
    SSLCertificateKeyFile="/etc/pki/tls/private/mycert.key" 
    SSLPassword="mypasswordwhichiassureyouisbetterthanthisone" 
    SSLCACertificateFile="/etc/pki/tls/certs/clientCAs.crt" 
/> 

、私はまた、その設定にSSLVerifyClientパラメータを追加し、optionalにそれを設定しようとしたが、それは/openContext/securedContextの両方に証明書を要求しますそれは私が望む行動ではありません。

1つのWebコンテキストでは証明書認証を要求するが、別のWebコンテキストでは要求しないようにするにはどうすればよいですか?

答えて

3

私にとっては、まったく新しいWebコネクタを追加して、クライアントがセキュリティで保護されたWebコンテキストに対してその代替ポートを使用するようにしました。私のコネクタの設定は、現在のようになります。

<Connector protocol="HTTP/1.1" SSLEnabled="true" 
    port="8443" address="${jboss.bind.address}" 
    scheme="https" secure="true" clientAuth="false" 
    SSLProtocol="SSLv3+TLSv1" 
    SSLCipherSuite="ALL:!ADH:!SSLv2:!EXPORT40:!EXP:!LOW" 
    SSLRandomSeed="/dev/urandom" 
    SSLCertificateFile="/etc/pki/tls/certs/mycert.crt" 
    SSLCertificateKeyFile="/etc/pki/tls/private/mycert.key" 
    SSLPassword="mypasswordwhichiassureyouisbetterthanthisone" 
/> 
<Connector protocol="HTTP/1.1" SSLEnabled="true" 
    port="8543" address="${jboss.bind.address}" 
    scheme="https" secure="true" clientAuth="true" 
    SSLProtocol="SSLv3+TLSv1" 
    SSLCipherSuite="ALL:!ADH:!SSLv2:!EXPORT40:!EXP:!LOW" 
    SSLRandomSeed="/dev/urandom" 
    SSLCertificateFile="/etc/pki/tls/certs/mycert.crt" 
    SSLCertificateKeyFile="/etc/pki/tls/private/mycert.key" 
    SSLPassword="mypasswordwhichiassureyouisbetterthanthisone" 
    SSLCACertificateFile="/etc/pki/tls/certs/clientCAs.crt" 
    SSLVerifyClient="require" 
/> 

私はhttp://myhost:8443/openContextをヒットした場合、私は、証明書の入力を求めていないんだけど、私はhttp://myhost:8543/securedContextを打ったとき、私は、証明書の入力を求めています。もちろん、どちらのWebアプリケーションにも "間違った"ポートでアクセスすることはできますが、その結果は私の目的にとってはごくわずかです。クライアントがhttp://myhost:8443/securedContextにヒットした場合、クライアントは単にHTTP認証エラーを取得します。クライアントがhttp://myhost:8543/openContextにヒットした場合、クライアント証明書を要求されます。彼らが提供するものがあれば、(あなたが誰であるかは気にしませんが)素晴らしいものを提供していて、それを提供しないか、無効なものを提供すれば、HTTP認証エラーが発生します(最初は正しいポートを使用しているはずです) )。

JBossの前にhttpdを置いてそこで巧妙な設定をすることで、2番目のコネクタを必要とせずにこれを実現する代替方法があると確信しています。

関連する問題