相互身份验证PBOX00052:提供的凭据与别名

时间:2018-03-15 23:14:35

标签: ssl keytool wildfly-10 mutual-authentication

我创建了一个server.keystore,然后创建了一个带有client.crt的client.keyStore,我曾经使用过client.truststore

带有别名devmyserverkey的server.keystore

/myserver_opt/jdk1.8.0_latest/jre/bin/keytool -genkey -alias devmyserverkey -storetype pkcs12 -keyalg RSA -keysize 2048 -keystore myserver.keystore -validity 730 -storepass samepassword -dname "CN=dev.myserver.com, OU=CMJAVA, O=myserver, L=City, ST=State, C=Country" -keypass samepassword

带有别名devclientkey

的client.keystore
/myserver_opt/jdk1.8.0_latest/jre/bin/keytool  -genkey -keystore client.keystore -storepass samepassword  -keyalg RSA -keysize 2048 -storetype pkcs12  -alias devclientkey -dname "CN=dev.myserver.com, OU=CMJAVA, O=myserver, L=City, ST=State, C=Country"

然后客户端crt使用别名devclientkey

/myserver_opt/jdk1.8.0_latest/jre/bin/keytool -exportcert -keystore client.keystore  -storetype pkcs12 -storepass samepassword  -keypass samepassword  -file client.crt -alias devclientkey

然后是客户端信任库

/myserver_opt/jdk1.8.0_latest/jre/bin/keytool -import -file client.crt -keystore client.truststore

然后是pkc12密钥库

 /myserver_opt/jdk1.8.0_latest/jre/bin/keytool -importkeystore -srckeystore client.keystore -destkeystore clientCert.p12 -srcstoretype PKCS12 -deststoretype PKCS12 -deststorepass samepassword

client.truststore和server.keystore位于我的widlfly实例的配置目录中,当我尝试访问我的应用程序时,我得到以下内容:

   2018-03-16 08:23:18,177 TRACE [org.jboss.security] (default task-28) PBOX00200: Begin isValid, principal: org.wildfly.extension.undertow.security.AccountImpl$AccountPrincipal@3e1567dc, cache entry: null 2018-03-16 08:23:18,177 TRACE [org.jboss.security] (default task-28) PBOX00209: defaultLogin, principal: org.wildfly.extension.undertow.security.AccountImpl$AccountPrincipal@3e1567dc 2018-03-16 08:23:18,178 TRACE [org.jboss.security] (default task-28) PBOX00221: Begin getAppConfigurationEntry(mygenwebservicessecurity), size: 6 2018-03-16 08:23:18,179 TRACE [org.jboss.security] (default task-28) PBOX00224: End getAppConfigurationEntry(mygenwebservicessecurity), AuthInfo: AppConfigurationEntry[]: [0] LoginModule Class: org.jboss.security.auth.spi.BaseCertLoginModule ControlFlag: LoginModuleControlFlag: required Options: name=securityDomain, value=mygenwebservicessecurity

2018-03-16 08:23:18,181 TRACE [org.jboss.security] (default task-28) PBOX00236: Begin initialize method 2018-03-16 08:23:18,192 TRACE [org.jboss.security] (default task-28) PBOX00245: Found security domain: org.jboss.security.JBossJSSESecurityDomain 2018-03-16 08:23:18,192 TRACE [org.jboss.security] (default task-28) PBOX00239: End initialize method 2018-03-16 08:23:18,192 TRACE [org.jboss.security] (default task-28) PBOX00240: Begin login method 2018-03-16 08:23:18,192 TRACE [org.jboss.security] (default task-28) PBOX00240: Begin login method 2018-03-16 08:23:18,192 TRACE [org.jboss.security] (default task-28) PBOX00252: Begin getAliasAndCert method 2018-03-16 08:23:18,193 TRACE [org.jboss.security] (default task-28) PBOX00253: Found certificate, serial number: 13e04227, subject DN: CN=dev.myserver.com, OU=CMJAVA, O=myserver, L=City, ST=State, C=Country 2018-03-16 08:23:18,193 TRACE [org.jboss.security] (default task-28) PBOX00255: End getAliasAndCert method 2018-03-16 08:23:18,193 TRACE [org.jboss.security] (default task-28) PBOX00256: Begin validateCredential method 2018-03-16 08:23:18,201 TRACE [org.jboss.security] (default task-28)
        PBOX00056: Supplied credential: 13e04227
                CN=dev.myserver.com, OU=CMJAVA, O=myserver, L=City, ST=State, C=Country

        PBOX00057: Existing credential: PBOX00058: No match for alias CN=dev.myserver.com, OU=CMJAVA, O=myserver, L=City, ST=State, C=Country, existing aliases: [mykey] 2018-03-16 08:23:18,201 TRACE [org.jboss.security] (default task-28) PBOX00260: End validateCredential method, result: false 2018-03-16 08:23:18,201 TRACE [org.jboss.security] (default task-28) PBOX00244: Begin abort method, overall result: false 2018-03-16 08:23:18,201 DEBUG [org.jboss.security] (default task-28) PBOX00206: Login failure: javax.security.auth.login.FailedLoginException: PBOX00052: Supplied credential did not match existing credential for alias CN=dev.myserver.com, OU=CMJAVA, O=myserver, L=City, ST=State, C=Country
        at org.jboss.security.auth.spi.BaseCertLoginModule.login(BaseCertLoginModule.java:231)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at javax.security.auth.login.LoginContext.invoke(LoginContext.java:755)

我认为这两者之间没有任何区别。我看到的唯一区别是别名mykey。这是一个默认别名。但这是从哪里来的,因为我自己为两者提供了别名。

这是我在standalone.xml中添加的内容

 <security-realm name="SSLRealm">
                <server-identities>
                    <ssl>
                        <keystore path="myserver.keystore" relative-to="jboss.server.config.dir" keystore-password="samepassword" alias="devmyserverkey" key-password="samepassword"/>
                    </ssl>
                </server-identities>
                <authentication>
                    <truststore path="client.truststore" relative-to="jboss.server.config.dir" keystore-password="samepassword"/>
                    <local default-user="$local" skip-group-loading="true"/>
                    <properties path="mgmt-users.properties" relative-to="jboss.server.config.dir"/>
                </authentication>
            </security-realm>
        </security-realms>

  <subsystem xmlns="urn:jboss:domain:remoting:3.0">
            <endpoint/>
            <http-connector name="http-remoting-connector" connector-ref="default" security-realm="ApplicationRealm"/>
            <http-connector name="https-remoting-connector" connector-ref="default-https" security-realm="SSLRealm"/>
        </subsystem>

            <subsystem xmlns="urn:jboss:domain:security:1.2">
                <security-domains>

                   <security-domain name="mygenwebservicessecurity" cache-type="default">
                    <authentication>

                        <login-module code="Certificate" flag="required">
                            <module-option name="securityDomain" value="mygenwebservicessecurity"/>
                            <!--module-option name="rolesProperties" value="file:${jboss.server.config.dir}/user_roles.properties"/>
                            <module-option name="defaultRolesProperties" value="file:${jboss.server.config.dir}/default_roles.properties"/-->
                        </login-module>
                    </authentication>
                    <jsse keystore-password="samepassword" keystore-url="file:/myserver_opt/wildfly10_javatest/mlws/configuration/myserver.keystore" truststore-password="samepassword" truststore-url="file:/myserver_opt/wildfly10_javatest/mlws/configuration/client.truststore" client-auth="true"/>
                </security-domain>
            </security-domains>
        </subsystem>


        <subsystem xmlns="urn:jboss:domain:undertow:3.0">
            <buffer-cache name="default"/>
            <server name="default-server">
                <http-listener name="defaultHTTP" socket-binding="http" redirect-socket="https"/>
                <https-listener name="default" enabled-protocols="TLSv1.2" verify-client="REQUIRED" security-realm="SSLRealm" socket-binding="https"/>
                <host name="default-host" alias="localhost">
                    <location name="/" handler="welcome-content"/>
                    <access-log predicate="not equals[%a, %A]" suffix=".log" prefix="access" pattern="%h %l %u %t &quot;%r&quot; %s %b &quot;%{i,Referer}&quot; &quot;%{i,User-Agent}&quot; %D %T"/>
                    <filter-ref name="server-header"/>
                    <filter-ref name="x-powered-by-header"/>
                </host>
            </server>

在我的standalone.xml中添加上述内容后,当我尝试通过http访问我的应用程序时,它也是Forbidden。但上面的例外是https附带的例外,没有意义。

编辑:

我删除了所有别名引用并再次制作证书并使用

进行检查
keytool -list - v -keystore ( truststore/pC12Store/Server.keystore/client.keystore)  

他们都有相同的别名mykey

我甚至查看了抛出错误的类的代码,看起来这个类的别名不是'mykey'而是DN定义/ Subject

2 个答案:

答案 0 :(得分:0)

我在我的安全域mygenwebservicessecurity

中添加了以下验证程序
<module-option name="verifier" value="org.jboss.security.auth.certs.AnyCertVerifier"/>

还有另一个名为X509Verifier的验证程序,但它只是一个接口,因此您需要实现自己的,并在需要时将其添加到jar中

和AnyCertVerifier使其验证。

现在,当我点击链接http和https时,同样的问题发生时,只有日志而且只有状态 :

2018-03-16 23:20:22,695 TRACE [org.jboss.security] (default task-11) PBOX00354: Setting security roles ThreadLocal: null
2018-03-16 23:20:28,584 TRACE [org.jboss.security] (default task-13) PBOX00354: Setting security roles ThreadLocal: null
2018-03-16 23:20:30,570 TRACE [org.jboss.security] (default task-15) PBOX00354: Setting security roles ThreadLocal: null

根据picketbox 4.9中的代码。 WF10在其模块中具有此异常跟踪仅在

中抛出

https://github.com/picketbox/picketbox/blob/master/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/SecurityRolesAssociation.java

我对这个错误有点想法。它只是有意义,因为ppl已经得到了这个错误,但他们通过数据库查询或其他东西添加了角色,并解决了它。我添加了roles.properties和users.properties但它不占用我的角色。

此外,某些类(可能是wildfly)调用此类的setSecurityRoles方法,没有安全角色(null),这是trace语句中的null。 ??但这也许是一个单独的问题。

答案 1 :(得分:0)

Ok也解决了最后一点。

它需要安全角色..对&gt;?所以我添加了roles.properties,我按照https://developer.jboss.org/wiki/BaseCertLoginModule(一个旧的wiki,但它帮助我找不到一些东西)来做到了这一点。

由于baseCertLoginModule没有将roelsProperties作为一个选项,因此,我将loginmodule更改为

__init__

再次完美运作

我得到了我的结果......我正在为我的荣耀而烦恼:D

我仍然得到相同的一行

<login-module code="CertificateRoles" flag="required">

之后它已经检索了结果,所以它可能是我如何编码我的请求响应或其他东西。我的http仍然不起作用..但我的https工作,这是我想要的。我会谎言知道http如何停止工作。是使用https / SSL域或登录模块的副作用。