Worklight Development SSL 问题(无法找到证书链)
Worklight Development SSL issue (unable to find certificate chain)
我一直在查看与我面临的问题相关的所有链接,但我无法 get/understand 我做错了什么:
描述:
我正在尝试配置我的本地 WL 开发服务器以安全地连接到我们的后端。
我们的 PaaS 团队给了我我们的 WL Enterprise 密钥库,其中包含连接到后端所需的所有证书。密钥库是 .p12.
在worklight.properties中:
#SSL certificate keystore location.
ssl.keystore.path=conf/ecommerce_bk_mobile.p12
#SSL certificate keystore type (jks or PKCS12)
ssl.keystore.type=PKCS12
#SSL certificate keystore password.
ssl.keystore.password=*****
还设置了 SSL 别名和密码:
banking.services.ssl.certificate.alias=bkdev1_wl
banking.services.ssl.certificate.password=******
Adapter.xml:
<connectionPolicy xsi:type="http:HTTPConnectionPolicyType">
<protocol>https</protocol>
<domain>mbcdev1mobile.com</domain>
<port>PORT-NUM</port>
<sslCertificateAlias>${banking.services.ssl.certificate.alias}</sslCertificateAlias>
<sslCertificatePassword>${banking.services.ssl.certificate.password}</sslCertificatePassword>
</connectionPolicy>
我已验证 p12 密钥具有我需要的证书:
但是,我得到的错误是:
Unable to find certificate chain with alias: 'bkdev1_wl'
(上面的配置和我们实际的企业服务器是一致的,但是企业服务器是可以连接的,我不是通过我本地的)
1.How我可以在 WL 开发服务器上打开 SSL 日志记录吗?
(我确实添加了<logging traceSpecification="*=fine: com.worklight.*=debug=enabled : com.ibm.ws.ssl.*=all=enabled"/>
)但是没有用。
2.What我是不是不见了?
3.Is有明确的设置步骤吗?
WL版本:6.2.0.01.20150214-1613
谢谢
编辑
我一直在检查配置,我有以下问题:
在我打开 SSL 日志记录后,我发现 WL 正在跟踪其默认存储(key.js),该存储位于以下路径下:
/Users/sam/Documents/workspace/WorklightServerConfig/servers/worklight/resources/security/key.jks
意味着 WL 甚至没有读取它自己的 属性 我设置密钥存储位置的地方:
ssl.keystore.path=conf/ecommerce_bk_mobile.p12
我也做了以下事情:
在我的运行时内-web.xml 位于:
/Users/sam/Documents/workspace/WorklightServerConfig/IPAS
我强迫服务器拿起我的钥匙:
<env-entry>
<description>[OPTIONAL] SSL certificate keystore location. Default: conf/default.keystore.</description>
<env-entry-name>ssl.keystore.path</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>conf/ecommerce_bk_mobile.p12</env-entry-value>
</env-entry>
<env-entry>
<description>[OPTIONAL] SSL certificate keystore type. Valid keystore types: jks, PKCS12. Default: jks.</description>
<env-entry-name>ssl.keystore.type</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>PKCS12</env-entry-value>
</env-entry>
<env-entry>
<description>[OPTIONAL] SSL certificate keystore password.Default: worklight.</description>
<env-entry-name>ssl.keystore.password</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>********</env-entry-value>
</env-entry>
我不确定是否需要对我的 jvm.options 文件进行任何更改以强制 WL 遵循我在其 属性 中定义的密钥存储路径:
JVM 内容:
-Dfile.encoding=UTF-8
-Duser.language=en
-Duser.country=US
-Djava.awt.headless=true
-Dwas.debug.mode=true
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=10777
-Dcom.ibm.websphere.ras.inject.at.transform=true
-Dcom.ibm.ws.jmx.connector.client.rest.readTimeout=180000
-Dibm.worklight.admin.db.type=DERBY
-Xmx1024m
-DwlDevEnv.enableCreateTables=true
-Djmx.remote.x.client.connection.check.period=0
-DwlSyncStart=false
两个问题:
- 您正在使用相互身份验证吗?
启用相互身份验证后,worklight 通过检查其证书来检查后端是否为正版,并且后端还通过检查其证书来检查客户端(在本例中为 worklight 适配器)是否为正版。
如果您不使用相互身份验证,则无需在适配器连接策略中设置 sslCertificateAlias 和 sslCertificatePassword。
- 如果你确实需要相互认证,你确定你的p12文件是正确的吗?我怀疑你的 p12 文件可能有问题。
要排除 p12 文件出现任何问题的可能性,您可以这样做,
通过连接信任链中的所有 CA 证书创建单个 CA 证书
为此,获取属于您的证书信任链的所有 CA 证书。将其中的每一个复制到一个文件中,比如 cacerts.pem。例如,如果您的信任链中有三个 CA 证书,您可以连接并创建一个包含所有证书的文件,例如 cat ca1.crt ca2.crt ca3.crt >> cacerts.pem
所以您现在拥有的是一个文件,其中包含作为信任链一部分的所有 ca 证书。在你继续之前,检查你拥有的是正确的,通过执行这个命令,
openssl verify -verbose -CAfile cacerts.pem server.crt
(将 server.crt 替换为您的证书文件名)。你应该看到 server.crt:好的。
使用之前创建的 CA 证书创建 p12 文件
现在通过导入您的服务器证书、它的私钥和我们之前创建的 ca 证书文件来创建一个 p12 文件。
openssl pkcs12 -export -in server.crt -inkey serverprivate.key -chain -CAfile cacerts.pem -name "bkdev1_wl" -out ecommerce_bk_mobile.p12
.
它会要求您输入私钥密码,然后是导出密码,确保您为导出密码提供的任何内容,都将其用作 worklight.properties 中 ssl.keystore.password 的值。
接下来确保您在定义您提到的属性时提供了我们在前面的命令中使用的别名,banking.services.ssl.certificate.alias=bkdev1_wl 和值
banking.services.ssl.certificate.password,应该是私钥的属性而不是p12文件
尝试连接并检查。如果您仍然遇到错误,请分享您在工作灯端看到的内容以及您在后端服务器端看到的内容。
我一直在查看与我面临的问题相关的所有链接,但我无法 get/understand 我做错了什么:
描述:
我正在尝试配置我的本地 WL 开发服务器以安全地连接到我们的后端。
我们的 PaaS 团队给了我我们的 WL Enterprise 密钥库,其中包含连接到后端所需的所有证书。密钥库是 .p12.
在worklight.properties中:
#SSL certificate keystore location.
ssl.keystore.path=conf/ecommerce_bk_mobile.p12
#SSL certificate keystore type (jks or PKCS12)
ssl.keystore.type=PKCS12
#SSL certificate keystore password.
ssl.keystore.password=*****
还设置了 SSL 别名和密码:
banking.services.ssl.certificate.alias=bkdev1_wl
banking.services.ssl.certificate.password=******
Adapter.xml:
<connectionPolicy xsi:type="http:HTTPConnectionPolicyType">
<protocol>https</protocol>
<domain>mbcdev1mobile.com</domain>
<port>PORT-NUM</port>
<sslCertificateAlias>${banking.services.ssl.certificate.alias}</sslCertificateAlias>
<sslCertificatePassword>${banking.services.ssl.certificate.password}</sslCertificatePassword>
</connectionPolicy>
我已验证 p12 密钥具有我需要的证书:
但是,我得到的错误是:
Unable to find certificate chain with alias: 'bkdev1_wl'
(上面的配置和我们实际的企业服务器是一致的,但是企业服务器是可以连接的,我不是通过我本地的)
1.How我可以在 WL 开发服务器上打开 SSL 日志记录吗?
(我确实添加了<logging traceSpecification="*=fine: com.worklight.*=debug=enabled : com.ibm.ws.ssl.*=all=enabled"/>
)但是没有用。
2.What我是不是不见了?
3.Is有明确的设置步骤吗?
WL版本:6.2.0.01.20150214-1613
谢谢
编辑
我一直在检查配置,我有以下问题:
在我打开 SSL 日志记录后,我发现 WL 正在跟踪其默认存储(key.js),该存储位于以下路径下:
/Users/sam/Documents/workspace/WorklightServerConfig/servers/worklight/resources/security/key.jks
意味着 WL 甚至没有读取它自己的 属性 我设置密钥存储位置的地方:
ssl.keystore.path=conf/ecommerce_bk_mobile.p12
我也做了以下事情: 在我的运行时内-web.xml 位于:
/Users/sam/Documents/workspace/WorklightServerConfig/IPAS
我强迫服务器拿起我的钥匙:
<env-entry>
<description>[OPTIONAL] SSL certificate keystore location. Default: conf/default.keystore.</description>
<env-entry-name>ssl.keystore.path</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>conf/ecommerce_bk_mobile.p12</env-entry-value>
</env-entry>
<env-entry>
<description>[OPTIONAL] SSL certificate keystore type. Valid keystore types: jks, PKCS12. Default: jks.</description>
<env-entry-name>ssl.keystore.type</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>PKCS12</env-entry-value>
</env-entry>
<env-entry>
<description>[OPTIONAL] SSL certificate keystore password.Default: worklight.</description>
<env-entry-name>ssl.keystore.password</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>********</env-entry-value>
</env-entry>
我不确定是否需要对我的 jvm.options 文件进行任何更改以强制 WL 遵循我在其 属性 中定义的密钥存储路径:
JVM 内容:
-Dfile.encoding=UTF-8
-Duser.language=en
-Duser.country=US
-Djava.awt.headless=true
-Dwas.debug.mode=true
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=10777
-Dcom.ibm.websphere.ras.inject.at.transform=true
-Dcom.ibm.ws.jmx.connector.client.rest.readTimeout=180000
-Dibm.worklight.admin.db.type=DERBY
-Xmx1024m
-DwlDevEnv.enableCreateTables=true
-Djmx.remote.x.client.connection.check.period=0
-DwlSyncStart=false
两个问题:
- 您正在使用相互身份验证吗?
启用相互身份验证后,worklight 通过检查其证书来检查后端是否为正版,并且后端还通过检查其证书来检查客户端(在本例中为 worklight 适配器)是否为正版。 如果您不使用相互身份验证,则无需在适配器连接策略中设置 sslCertificateAlias 和 sslCertificatePassword。 - 如果你确实需要相互认证,你确定你的p12文件是正确的吗?我怀疑你的 p12 文件可能有问题。
要排除 p12 文件出现任何问题的可能性,您可以这样做,
通过连接信任链中的所有 CA 证书创建单个 CA 证书
为此,获取属于您的证书信任链的所有 CA 证书。将其中的每一个复制到一个文件中,比如 cacerts.pem。例如,如果您的信任链中有三个 CA 证书,您可以连接并创建一个包含所有证书的文件,例如 cat ca1.crt ca2.crt ca3.crt >> cacerts.pem
所以您现在拥有的是一个文件,其中包含作为信任链一部分的所有 ca 证书。在你继续之前,检查你拥有的是正确的,通过执行这个命令,
openssl verify -verbose -CAfile cacerts.pem server.crt
(将 server.crt 替换为您的证书文件名)。你应该看到 server.crt:好的。
使用之前创建的 CA 证书创建 p12 文件
现在通过导入您的服务器证书、它的私钥和我们之前创建的 ca 证书文件来创建一个 p12 文件。
openssl pkcs12 -export -in server.crt -inkey serverprivate.key -chain -CAfile cacerts.pem -name "bkdev1_wl" -out ecommerce_bk_mobile.p12
.
它会要求您输入私钥密码,然后是导出密码,确保您为导出密码提供的任何内容,都将其用作 worklight.properties 中 ssl.keystore.password 的值。
接下来确保您在定义您提到的属性时提供了我们在前面的命令中使用的别名,banking.services.ssl.certificate.alias=bkdev1_wl 和值 banking.services.ssl.certificate.password,应该是私钥的属性而不是p12文件
尝试连接并检查。如果您仍然遇到错误,请分享您在工作灯端看到的内容以及您在后端服务器端看到的内容。