类似于问题:
我正在尝试从使用 Active Directory 中定义为“account1$”的运行的服务访问本地计算机“我的(个人)存储”中的证书
如果我向任何本地或域用户授予特殊的读取访问权限,它可以在从 CLI 运行程序时访问。
如果我授予托管服务帐户(account1$)对证书的读取和完全访问权限,该服务将返回密钥库的访问被拒绝错误。
服务正在使用 Java(tomcat),但我知道问题不在于 Java,因为我使用的是 jdk 11.0.23,并且从控制台启动时它可以正常工作。
24-Jun-2024 17:01:11.432 SEVERE [main] org.apache.catalina.util.LifecycleBase.handleSubClassException Failed to initialize component [Connector[HTTP/1.1-8443]]
org.apache.catalina.LifecycleException: Protocol handler initialization failed
at org.apache.catalina.connector.Connector.initInternal(Connector.java:1051)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
at org.apache.catalina.core.StandardService.initInternal(StandardService.java:556)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:1045)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
at org.apache.catalina.startup.Catalina.load(Catalina.java:724)
at org.apache.catalina.startup.Catalina.load(Catalina.java:746)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:305)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:475)
Caused by: java.lang.IllegalArgumentException: java.security.KeyStoreException: Access is denied.
at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:107)
at org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:71)
at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:235)
at org.apache.tomcat.util.net.AbstractEndpoint.bindWithCleanup(AbstractEndpoint.java:1227)
at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:1240)
at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:603)
at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:80)
at org.apache.catalina.connector.Connector.initInternal(Connector.java:1048)
... 13 more
Caused by: java.io.IOException: java.security.KeyStoreException: Access is denied.
at jdk.crypto.mscapi/sun.security.mscapi.CKeyStore.engineLoad(CKeyStore.java:735)
at jdk.crypto.mscapi/sun.security.mscapi.CKeyStore$MYLocalMachine.engineLoad(CKeyStore.java:72)
at java.base/java.security.KeyStore.load(KeyStore.java:1479)
at org.apache.tomcat.util.security.KeyStoreUtil.load(KeyStoreUtil.java:69)
at org.apache.tomcat.util.net.SSLUtilBase.getStore(SSLUtilBase.java:217)
at org.apache.tomcat.util.net.SSLHostConfigCertificate.getCertificateKeystore(SSLHostConfigCertificate.java:207)
at org.apache.tomcat.util.net.SSLUtilBase.getKeyManagers(SSLUtilBase.java:283)
at org.apache.tomcat.util.net.SSLUtilBase.createSSLContext(SSLUtilBase.java:247)
at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:105)
... 20 more
Caused by: java.security.KeyStoreException: Access is denied.
at jdk.crypto.mscapi/sun.security.mscapi.CKeyStore.loadKeysOrCertificateChains(Native Method)
at jdk.crypto.mscapi/sun.security.mscapi.CKeyStore.engineLoad(CKeyStore.java:732)
... 28 more
5
最佳答案
1
最后,我得到了一个适用于证书存储的配置。它非常具体,到目前为止我找不到任何其他配置。
它可以工作,但在我们的环境中还需要手动步骤。我认为它应该在 Windows 中配置,并且对于所有请求私钥的程序都是通用的,而不是 Tomcat 独有的。
显示 Windows 安全对话框,要求允许访问,类似于 UAC,但用于证书。
使用的 server.xml 配置是
<Connector port="8443"
scheme="https" secure="true" SSLEnabled="true">
<SSLHostConfig>
<Certificate
certificateKeystoreType="Windows-MY-LOCALMACHINE"
certificateKeystoreFile=""
certificateKeyAlias="tomcat"/>
</SSLHostConfig>
</Connector>
我继续研究尝试使用不同的密码和属性,因为如果没有,我将无法使用标准。对我来说,很明显,Tomcat 中使用了不同的内部库,所以当我只使用时,它不起作用,并且它不会在存储中找到密钥。
就最初的问题而言,我认为这个解决方案是有效的,因为 Tomcat 能够与 Windows 本地计算机证书存储一起使用。
解决方案要求:
- JDK 11.0.20+ 或已修复错误的 JDK 版本
- 使用 Tomcat 9.0.63 进行测试
- 在 Windows 2019 中测试
0
|
–
–
–
–
–
|