簡體   English   中英

JBoss5 CLIENT-CERT身份驗證獲得HTTP狀態401-無法使用提供的憑據錯誤進行身份驗證

[英]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密碼

將server.keystore文件復制到$ {JBOSS_HOME} / server / default / conf文件夾中。

在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文件夾中。

請參考給定的鏈接以了解Jboss5中的更多安全概念

更新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->輸入密碼,然后確定

在客戶端瀏覽器上導入client.p12證書

打開瀏覽器,然后鍵入以下URL: http:// yourwebservicehost:8080 / Hello / rest / hello / Test正在獲取下面的窗口,該窗口是許可證證書,然后單擊確定 訪問網絡服務后顯示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM