Как я могу заставить аутентификацию сертификата клиента работать в JBoss 5.1.0.GA, когда я использую APR, и не все веб-развертывания используют аутентификацию CLIENT-CERT? - PullRequest
2 голосов
/ 30 октября 2011

Примечание: я отвечу на свой собственный вопрос ... просто хотел добавить этот лакомый кусочек к коллективной мудрости Интернета.

Я успешно настроил аутентификацию сертификата на своемСервер JBoss 5.1.0.GA, в основном с помощью информации на этой странице: http://docs.jboss.org/jbossas/jboss4guide/r1/html/ch8.chapter.html

У меня есть один контекст (назовем его /openContext), который не требует никакой аутентификации, и другойконтекст (назовем его /securedContext), который требует аутентификации сертификата клиента (т. е. он настроен на использование CLIENT-CERT в web.xml).При использовании стандартного веб-соединителя JBoss это работает великолепно.Я могу нажать http://myhost/openContext, и у меня не запрашивается сертификат, но когда я нажимаю http://myhost/securedContext, у меня запрашивается сертификат клиента, как и ожидалось.

Однако при установке JBossWeb Native и использование APR в качестве моего веб-коннектора, мне больше не предлагается сертификат при нажатии 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, что не являетсяповедение, которое я хочу.

Как заставить JBoss с APR требовать аутентификацию сертификата для одного веб-контекста, но не для другого веб-контекста?

1 Ответ

3 голосов
/ 31 октября 2011

Для меня сработало просто добавить новый веб-коннектор и заставить клиентов использовать этот альтернативный порт для защищенного веб-контекста. Мой коннектор коннекторов теперь выглядит так:

<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, у меня будет запрошен сертификат. Конечно, я могу получить доступ к любому веб-приложению с «неправильным» портом, но последствия для моих целей незначительны. Если клиент нажимает http://myhost:8443/securedContext, он просто получает ошибку аутентификации HTTP. Если клиент нажимает http://myhost:8543/openContext, ему предлагается ввести сертификат клиента. Если они предоставляют один, отличный (хотя мне все равно, кто вы), и если они не предоставляют один или предоставляют неверный, они получают ошибку аутентификации HTTP (они должны были использовать правильный порт в первую очередь ).

Я почти уверен, что есть альтернативный способ заставить это работать, не требуя второго соединителя, поместив httpd перед JBoss и выполнив некоторую умную настройку там, но это работало достаточно хорошо для моих целей.

...