2

注意:我将回答我自己的问题......只是想将此花絮添加到互联网的集体智慧中。

我已经在我的 JBoss 5.1.0.GA 服务器上成功配置了证书身份验证,主要是借助此页面上的信息:http://docs.jboss.org/jbossas/jboss4guide/r1/html/ch8.chapter 。 html

我有一个/openContext不需要任何身份验证的上下文(我们称之为它/securedContext)和另一个需要客户端证书身份验证的上下文(我们称之为它)(即,它被配置为在 web.xml 中使用 CLIENT-CERT)。当使用 JBoss 的默认 Web 连接器时,这非常有效。我可以点击http://myhost/openContext,但不会提示我输入证书,但是当我点击 时http://myhost/securedContext,会提示我输入客户端证书,正如我所期望的那样。

但是,当我安装JBossWeb Native并使用 APR 作为我的 Web 连接器时,当我点击http://myhost/securedContext.

我的 APR 连接器配置server.xml如下所示:

<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,这不是我想要的行为。

如何让带有 APR 的 JBoss 要求对一个 Web 上下文而不是另一个 Web 上下文进行证书身份验证?

4

1 回答 1

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 auth 错误(他们应该首先使用正确的端口)。

我很确定有另一种方法可以通过将 httpd 放在 JBoss 前面并在那里进行一些巧妙的配置,从而无需第二个连接器即可使其正常工作,但这对于我的目的来说已经足够好了。

于 2011-10-31T15:00:16.463 回答