Tomcat 9上的SSL Windows证书错误



SSL在我的服务器Tomcat 7.0.108中启用。我根据这个答案启用了它https://stackoverflow.com/a/48883483

serverx.xml中的我的连接器是:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxHttpHeaderSize="65536"
maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
clientAuth="false"
sslProtocol="TLS"
keyAlias="tomcat"
keystoreFile=""
keystorePass=""
keystoreType="Windows-My">
</Connector>

但是,在Tomcat 9.0.45中,相同的配置有一个错误。

org.apache.tomcat.util.net.openssl.OpenSSLContext.init Error initializing SSL context
java.lang.NullPointerException
at java.util.Base64$Encoder.encode(Base64.java:261)
at java.util.Base64$Encoder.encodeToString(Base64.java:315)
at org.apache.tomcat.util.net.openssl.OpenSSLContext.addCertificate(OpenSSLContext.java:405)
at org.apache.tomcat.util.net.openssl.OpenSSLContext.init(OpenSSLContext.java:250)

是否有人使用Windows证书在Tomcat 9中启用SSL?

错误是由Tomcat选择的SSLImplementation引起的:OpenSSLImplementation需要直接访问私钥,如果使用Windows-MY密钥库,这是不可能的。

您只需要切换到JSSEImplementation,就会得到以下配置:

<Connector port="8443"
sslImplementationName="org.apache.tomcat.util.net.jsse.JSSEImplementation"
scheme="https" secure="true" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreType="Windows-MY"
certificateKeystoreFile=""
certificateKeyAlias="tomcat" />
</SSLHostConfig>
</Connector>

只要存在Tomcat Native库(在Windows上很常见(,sslImplementationName的默认值就会自动从JSSEImplementation切换到OpenSSLImplementation:参见Tomcat Documentation。

请注意,自Tomcat 8.5以来,SSL配置语法发生了更改。您在问题中使用的那个在Tomcat 8.5中已被弃用,并已从Tomcat 10.0中删除。

最新更新