[英]JBoss7 client-cert authentication: Ciper suite in SSL Session is SSL_NULL_WITH_NULL_NULL
[英]JBoss5 CLIENT-CERT authentication getting HTTP Status 401 - Cannot authenticate with the provided credentials error
我想要使用CLIENT-CERT進行相互身份驗證,並且還需要與Restful Jersey Web服務一起指定角色。 這是server.xml中的clientAuth =“ false”
我的web.xml如下:
<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>
com.sun.jersey.spi.container.servlet.ServletContainer
</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.aditi.test</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<login-config>
**<auth-method>CLIENT-CERT</auth-method>**
<realm-name>JMX Console</realm-name>
</login-config>
<security-role>
<description>Admin role</description>
<role-name>admin</role-name>
</security-role>
我的jboss-web.xml是:
<jboss-web>
<security-domain>java:/jaas/client_cert</security-domain>
</jboss-web>
我還使用keytool和openssl創建了server.keystore,server.truststore,client.keystore,client.truststore和client.p12。
login-config.xml中的更改是:
<application-policy name="client_cert">
<authentication>
<login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule" flag="required">
<module-option name="usersProperties">
props/cert-users.properties</module-option>
<module-option name="rolesProperties">
props/cert-roles.properties</module-option>
<module-option name="verifier">
com.secure.CertVerifier</module-option>
</login-module>
</authentication>
而且jboss-service.xml包含:
<mbean code="org.jboss.security.plugins.JaasSecurityDomain" name="jboss.security:service=SecurityDomain">
<constructor>
<arg type="java.lang.String" value="client_cert"/>
</constructor>
<attribute name="KeyStoreURL">${jboss.server.home.dir}/conf/server.keystore</attribute>
<attribute name="KeyStorePass">base123</attribute>
<attribute name="TrustStoreURL">${jboss.server.home.dir}/conf/server.truststore</attribute>
<attribute name="TrustStorePass">base123</attribute>
<depends>jboss.security:service=JaasSecurityManager</depends>
com.secure.CertVerifier為:
public class CertVerifier implements X509CertificateVerifier {
@Override
public boolean verify(X509Certificate xcert, String arg1, KeyStore arg2,
KeyStore arg3) {
System.out.println("hi verify");
Principal pr=xcert.getSubjectDN();
System.out.println("hi dear "+pr.getName());
return true;
}}
cert-users.properties文件也為空。 和cert-roles.properties文件是:
CN \\ = ClientHost,\\ OU \\ = test,\\ O \\ = test,\\ L \\ = pune,\\ ST \\ = mah,\\ C = IN = admin
現在,如果我通過瀏覽器訪問RESTful Web服務,我想導入client.p12證書,然后我將收到類似
HTTP Status 401 - Cannot authenticate with the provided credentials
我該如何解決? 我想在Jboss5中使用CLIENT-CERT進行身份驗證和授權。 這是怎么了? 它是如何工作的?
XML是
<display-name>Hello</display-name>
<servlet>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.aditi.test</param-value>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.aditi.test</param-value>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-serlvet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<security-constraint>
<web-resource-collection>
<web-resource-name>All</web-resource-name>
<url-pattern>/rest/hello/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<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是
<jboss-web>
<security-domain>java:/jaas/simple-security-domain</security-domain>
</jboss-web>
$ {JBOSS_HOME} /server/default/deploy/jbossweb.sar/server.xml是
<Connector protocol="HTTP/1.1" SSLEnabled="true"
port="8443" address="${jboss.bind.address}"
scheme="https" secure="true" clientAuth="false" sslProtocol = "TLS"
securityDomain="java:/jaas/simple-security-domain"
SSLImplementation="org.jboss.net.ssl.JbossImplementation"/>
創建證書,如下所示:
keytool -genkeypair -alias服務器密鑰-keyalg RSA -keysize 2048 -dname“ CN =服務器,OU =應用程序開發,O =家庭,L =奧克蘭,S = AK,C = NZ”-密鑰密碼-storepass密碼-密鑰庫服務器。 keystore keytool -genkeypair -alias clientkey -keyalg RSA -keysize 2048 -dname“ CN = Client,OU =應用程序開發,O = Home,L = Auckland,S = AK,C = NZ” -keypass密碼-storepass密碼-keystore客戶端的.keystore
keytool -exportcert -keystore client.keystore -storepass密碼-file client-public.cer -alias clientkey keytool -importcert -keystore server.keystore -storepass password -file client-public.cer -alias clientcert -noprompt
keytool -v-列表-keystore服務器.keystore -storepass密碼
keytool -exportcert -keystore server.keystore -storepass密碼-文件server-public.cer -alias serverkey keytool -importcert -keystore client.keystore -storepass密碼-file server-public.cer -alias servercert -noprompt
keytool -v-列表-keystore client.keystore -storepass密碼
keytool -importkeystore -srckeystore client.keystore -srcstorepass password -srcalias clientkey -destkeystore client.p12 -deststoretype PKCS12 -deststorepass password -destalias clientkey -noprompt
keytool -v-列表-keystore client.p12 -storetype pkcs12 -storepass密碼
在deploy /文件夾中創建jboss-service.xml文件,如下所示:
<mbean code="org.jboss.security.plugins.JaasSecurityDomain" name="jboss.security:service=PBESecurityDomain">
<constructor>
<attribute name="KeyStoreURL">resource:server.keystore</attribute>
<attribute name="KeyStorePass">
{CLASS}org.jboss.security.plugins.FilePassword:${jboss.server.home.dir}/conf/server.password</attribute>
<attribute name="TrustStoreURL">resource:server.keystore</attribute>
<attribute name="TrustStorePass"> {CLASS}org.jboss.security.plugins.FilePassword:${jboss.server.home.dir}/conf/server.password</attribute>
<attribute name="Salt">welcometojboss</attribute>
<attribute name="IterationCount">15</attribute>
</mbean>
在這里,我創建了加密的密碼文件server.password執行以下命令
java -classpath $ JBOSS_HOME /common/lib/jbosssx.jar org.jboss.security.plugins.FilePassword welcometojboss 13傳遞服務器的密碼
此命令使用jbosssx.jar作為類路徑(-cp)和FilePassword安全性插件來創建一個keystore.password文件,其密碼設置為unit-tests-server。 要驗證您是否有權創建keystore.password文件,請提供在
Salt和IterationCount是用於定義加密密碼強度的變量,因此您可以從顯示的內容中更改它。 確保記錄新值,並在生成加密密碼時使用。
它需要jbosssx.jar,它可能位於$ {jboss_home} / common / lib文件夾中。 將server.password文件復制到$ {JBOSS_HOME} / server / default / conf文件夾中。
更新Tomcat服務Mbean
導航至$ JBOSS_HOME / server / $ PROFILE / deploy / jbossweb.sar / META-INF /。 打開jboss-beans.xml並將以下標記附加到文件的WebServer末尾。 添加標簽指定tomcat必須在jboss.security:service=PBESecurityDomain之后開始
<bean name="WebServer"
....
class="org.jboss.web.tomcat.service.deployers.TomcatService">
<depends>jboss.security:service=PBESecurityDomain</depends>
部署Web服務並從客戶端訪問創建包含Web服務並部署在$ {JBOS_HOME} / server / default / deploy /文件夾中的xyz.war。
在瀏覽器中導入client.p12證書。 在Mozilla中,轉到首選項->查看證書->單擊導入->選擇client.p12->輸入密碼,然后確定
打開瀏覽器,然后鍵入以下URL: http:// yourwebservicehost:8080 / Hello / rest / hello / Test正在獲取下面的窗口,該窗口是許可證證書,然后單擊確定
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.