java - 如何在 spring boot 中使用非密码保护 (.p12) ssl 证书

标签 java spring spring-boot ssl

我有一个 .pem 证书,我必须在我的 spring boot 应用程序中使用它。 现在,由于 java 不理解 .pem 格式,我将其转换为 .p12 格式。

因为我们已经有一个不受任何密码保护的 .pem 证书,我也试图避免使用 .p12 的密码。

我创建了两个 .p12 文件,一个是使用以下命令设置密码的:

openssl x509 -signkey sslcert.key  -in sslcert.csr   -req -days 365
-out sslcert.pem

另一个没有密码使用下面的命令:

openssl pkcs12  -inkey sslcert.key  -in sslcert.pem  -export -passout
pass: -nokeys -out sslcert.p12

并且我能够在 spring boot 应用程序中使用带有密码的以下属性成功获得结果:

server.port=8443  
server.ssl.enabled=true 
server.ssl.key-store-type=PKCS12 
server.ssl.key-store=keys/sslcert.p12 
server.ssl.key-store-password=password

但是当我尝试使用我喜欢的不带密码的方式时,我遇到了 sslhandshake 异常。

而且,我无法弄清楚如何将此信息传递给 ssl 不受密码保护的 spring boot。

到目前为止,我尝试了很多组合,例如不传递密码属性或将其保留为空,但在所有情况下都失败了。

server.port=8443 
server.ssl.enabled=true
server.ssl.key-store-type=PKCS12
server.ssl.key-store=keys/sslcert.p12

我遇到异常:

javax.net.ssl.SSLHandshakeException: no cipher suites in common
    at sun.security.ssl.Handshaker.checkThrown(Unknown Source)
    at sun.security.ssl.SSLEngineImpl.checkTaskThrown(Unknown Source)
    at sun.security.ssl.SSLEngineImpl.writeAppRecord(Unknown Source)
    at sun.security.ssl.SSLEngineImpl.wrap(Unknown Source)
    at javax.net.ssl.SSLEngine.wrap(Unknown Source)
    at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.flush(SslConnection.java:864)
    at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.fill(SslConnection.java:515)
    at org.eclipse.jetty.server.HttpConnection.fillRequestBuffer(HttpConnection.java:331)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:243)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
    at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:411)
    at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:305)
    at org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:159)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
    at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
    at java.lang.Thread.run(Unknown Source)

那么,任何人都可以阐明如何在 spring boot 中使用非密码保护的 .p12 证书。

所有 googles 文章似乎都在讲述 protected 密码。那么它在 Java 中是强制性的吗?

最佳答案

经过所有研究,java key store 似乎需要密码。 所以我不得不忽略我们没有密码的 .p12。 并使用 pem 证书,我们将其转换为带密码的 .p12。 我在 spring 代码中执行此操作,我将随 secret 码传递给 shell 脚本,该脚本使用该密码从 .pem 生成 .p12。

然后我将相同的密码从代码传递给 ssl 属性。

一个缺点是每次重新启动应用程序时我都必须从 .pem 重新生成 .p12,但这是我防止静态密码的方法。

关于java - 如何在 spring boot 中使用非密码保护 (.p12) ssl 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58345405/

相关文章:

java - Spring Boot 静态资源不可用

java - Intellij 格式化。与正文不同的缩进的中断方法

java - 用按钮链接 2 个 jForms - java

java - Spring Boot 使用 1.5.6 发布重新打包的子模块 jar

java - org.apache.catalina.LifecycleException : Failed to start component [StandardEngine[Catalina]. StandardHost[本地主机].StandardContext[/mmasgis]]

java - 理解@Enable...注解并发

java - Spring boot application.yml 中的 Spring Kafka SSL 设置

spring-boot-starter-web @Autowired 不工作

java - Apache ActiveMQ 在 Windows 上启动然后突然停止

java - Android 虚线不显示