2016-05-15 12 views
0

Ich versuche, Client-Zertifikat-Authentifizierung mit JBoss einzurichten (bisher getestet mit 7.1.0 Schluss und 7.1.1 Finale, Java 6 und Java7).JBoss7 client-cert-Authentifizierung: Ciper Suite in SSL-Session ist SSL_NULL_WITH_NULL_NULL

1) Ich habe Zertifikat generiert basierend auf this

2) Ich habe kopiert keystore.server und server.truststore in /Standalone/Konfiguration Ordner.

3) In standalone.xml I Sicherheitsdomäne erstellt haben

<security-domain name="RequireCertificateDomain"> 
    <authentication> 
     <login-module code="CertificateRoles" flag="required"> 
       <module-option name="securityDomain" value="RequireCertificateDomain"/> 
       <module-option name="verifier" value="org.jboss.security.auth.certs.AnyCertVerifier"/> 
       <module-option name="usersProperties" value="${jboss.server.config.dir}/my-users.properties"/> 
       <module-option name="rolesProperties" value="${jboss.server.config.dir}/my-roles.properties"/> 
     </login-module> 
    </authentication> 
    <jsse keystore-password="changeit" keystore-url="file:C:/jboss/jboss-as-7.1.1.Final/standalone/configuration/server.keystore" truststore-password="changeit" truststore-url="file:C:/jboss/jboss-as-7.1.1.Final/standalone/configuration/server.truststore"/> 
</security-domain> 

und HTTPS-Anschluss:

<connector name="https" protocol="HTTP/1.1" scheme="https" socket-binding="https" secure="true"> 
    <ssl password="changeit" certificate-key-file="${jboss.server.config.dir}/server.keystore" verify-client="want" ca-certificate-file="${jboss.server.config.dir}/server.truststore"/> 
</connector> 

4) I-Zertifikat importiert haben, um /lib/security/cacerts (später habe ich versucht, Zugriff auf meine gesicherte WS von Spring RestTemplate - auch kein Glück)

5) Ich habe das Zertifikat in Internetoptionen importiert -> Inhalt -> Zertifikate -> Trusted Root CA (kann ich sehen, dass cert vertrauenswürdig ist)

6) Ich habe einfach JavaEE Ruhe WS, web.xml erstellt:

<security-constraint> 
    <display-name>Area secured</display-name> 
    <web-resource-collection> 
     <web-resource-name>protected_resources</web-resource-name> 
     <url-pattern>/api/account/*</url-pattern> 
     <http-method>GET</http-method> 
     <http-method>POST</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
     <description>User with any role</description> 
     <role-name>*</role-name> 
    </auth-constraint> 
      <user-data-constraint> 
       <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 


<login-config> 
    <auth-method>CLIENT-CERT</auth-method> 
</login-config> 

Jboss-web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<jboss-web> 
    <security-domain>RequireCertificateDomain</security-domain> 
</jboss-web> 

7) Beim Zugriff über Browser (Chrome/Firefox/IE) bekomme ich HTTP-Status 401 - Keine Client-Zertifikatskette in dieser Anfrage. In server.log kann ich das Folgende sehen:

Handshake failed: java.io.IOException: SSL handshake failed. Ciper suite in SSL Session is SSL_NULL_WITH_NULL_NULL 

habe ich im Internet suchen und fand heraus, dass es ein bug sein kann, aber sollte in 7.1.0 Final Release behoben werden. Leider bekomme ich diesen Fehler sowohl in Version 7.1.0 als auch in Version 7.1.1.

Fehle ich etwas?

Antwort

1

Ich laufe auf das gleiche Problem. Ich nehme an, dass der Browser Sie nicht einmal dazu auffordert, das Zertifikat zu wählen? Haben Sie versucht, curl zu verwenden, um die Anmeldeinformationen zu senden und javax.net.debug=ssl,handshake aufgetaucht? Sie können dann die Client- und Serverantworten in Ihren jboss-Protokollen sehen. Hier ist der Curl-Befehl.

curl --cert ./cert.pem --key ./key.pem https://jbosshost:port -k -v

Sie müssen OpenSSL benutzen, um Ihre p12 zu konvertieren cert und Schlüssel .pems