gpt4 book ai didi

java - JBoss5 CLIENT-CERT 身份验证获取 HTTP 状态 401 - 无法使用提供的凭据进行身份验证错误

转载 作者:太空宇宙 更新时间:2023-11-04 14:03:28 25 4
gpt4 key购买 nike

我希望使用 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"/>

创建证书如下:

创建服务器和应用程序客户端 keystore 和证书

keytool -genkeypair -alias serverkey -keyalg RSA -keysize 2048 -dname "CN=Server,OU=Application Development,O=Home,L=Auckland,S=AK,C=NZ"-keypass password -storepass password -keystore 服务器。 keystore
keytool -genkeypair -alias clientkey -keyalg RSA -keysize 2048 -dname "CN=Client,OU=Application Development,O=Home,L=Auckland,S=AK,C=NZ"-keypass password -storepass password -keystore 客户端。 keystore

将客户端的公共(public)证书复制到服务器的 keystore

keytool -exportcert -keystore client.keystore -storepass 密码 -file client-public.cer -alias clientkey
keytool -importcert -keystore server.keystore -storepass 密码 -file client-public.cer -alias clientcert -noprompt

查看服务器的 keystore 以确保客户端的证书在那里

keytool -v -list -keystore server.keystore -storepass 密码

将服务器的公共(public)证书复制到客户端的 keystore

keytool -exportcert -keystore server.keystore -storepass 密码 -file server-public.cer -alias serverkey
keytool -importcert -keystore client.keystore -storepass 密码 -file server-public.cer -alias servercert -noprompt

查看客户端的 keystore 以确保客户端的证书在那里

keytool -v -list -keystore client.keystore -storepass 密码

创建大多数浏览器都可以轻松读取的浏览器 keystore

keytool -importkeystore -srckeystore client.keystore -srcstorepass 密码 -srcalias clientkey -destkeystore client.p12 -deststoretype PKCS12 -deststorepass 密码 -destalias clientkey -noprompt

查看浏览器的 keystore 以确保客户端的证书在那里

keytool -v -list -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 your-pass server.password

此命令使用 jbosssx.jar 作为类路径 (-cp) 和 FilePassword 安全插件来创建密码设置为 unit-tests-server 的 keystore.password 文件。要验证您是否有权创建 keystore.password 文件,请提供在

Salt 和 IterationCount 是定义加密密码强度的变量,因此您可以根据显示的内容对其进行更改。确保记录新值,并在生成加密密码时使用。

它需要 jbosssx.jar,它可能位于 ${jboss_home}/common/lib 文件夹中。
将 server.password 文件复制到 ${JBOSS_HOME}/server/default/conf 文件夹中。

Kindly Refer the given link to know more security concepts in 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->输入密码然后确定

Import client.p12 certificate on client browser

打开浏览器并输入以下网址:
http://yourwebservicehost:8080/Hello/rest/hello/Test
得到下面的窗口这是 cilent 证书然后点击 ok
Display after accessing web service

关于java - JBoss5 CLIENT-CERT 身份验证获取 HTTP 状态 401 - 无法使用提供的凭据进行身份验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29093516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com