常见问题

和Tomcat以及Jetty等Java类服务器配置安装SSL数字证书一样,Spring Boot(内置tomcat)也是支持pfx(p12)格式部署和keystore (kjs)方式部署SSL数字证书,详细如下:

和Tomcat以及Jetty等Java类服务器配置安装SSL数字证书一样,Spring Boot(内置tomcat)也是支持pfx(p12)格式部署和keystore (kjs)方式部署SSL数字证书,详细如下:

bg spring boot 74a27

一、准备材料

1. CSR证书请求文件和私钥文件

私钥通常是在准备CSR证书请求文件时生成,使用openSSL生成存在CSR文件的同级目录中 - 生成CSR证书请求文件 ,使用在线工具会将随机生成的私钥+CSR发送到邮箱中,这样在JAVA应用的服务器中可以使用部署PFX/P12格式证书,需要了解关于SSL/TLS多种证书类型的转换。使如果用keytool生成的CSR证书请求文件和私钥要求签发证书后将证书导入到keystore;将CSR提交给infiniSign申请证书,将私钥自行妥善保管。

2. 签发证书

签发证书也就是经过CA验证过域名或者企业信息后所签发的域名证书,例如Web服务器会使用 www.yourdomain.com 作为主要网站,那么该证书验证的域名就是 www.yourdomain.com, 通过CA签发的证书需要购买数字证书,最低¥39/年的Comodo PositiveSSL就是一款的入门级SSL数字证书,立即前往购买

3. 证书链

一个完整的证书链应该由证书 + 中级证书A + 中级证书B + ... +根证书构成,所以通常,由CA签发的证书压缩包中会有1个或者多个中级证书,另外多家CA的中级证书在官网上有下载,关于合并中级证书请参考:SSL证书链不完整导致浏览器不受信任

二、安装部署

1、PFX/P12格式证书部署

我们建议部署PFX/P12格式证书,不受keystore证书容器影响,直接将带有私钥的pfx/p12证书放置在服务器指定路径,如下列代码中的/usr/local/ssl/server.pfx,在迁移服务器或者配置一些负载时更为便捷操作。

注意:

  • pfx/p12证书可以使用JAVA工程的类路径classpath放置证书,把server.pfx复制到spring boot的src/main/resources/ 目录下,和application.properties平级,那么server.ssl.key-store 的路径是 classpath: server.pfx
  • 如果不使用classpath配置证书路径,则证书路径使用服务器绝对路径:/usr/local/ssl/server.pfx

Spring Boot的application.properties配置代码如下:

server.port = 8443
# server.ssl.key-store = classpath: server.pfx
server.ssl.key-store = /usr/local/ssl/server.pfx
server.ssl.key-store-password = mypassword
server.ssl.keyStoreType = PKCS12
server.ssl.keyAlias = 1

报错分析:

如果部署jar包时出现报错信息:Alias name [tomcat] does not identify a key entry at org.apache.tomcat.util.net.AbstratJsseEndpoint.createSSLContent 则务必检查使用keystore存储证书还是使用服务器绝对路径证书

2、Keystore密钥库部署

使用JDK自带的keytool工具进行证书导入x.509格式证书,命令行工具进入JDK的keytool目录,执行下述命令:

keytool -import -alias server -trustcacerts
        -file server.crt -trustcacerts
        -keystore %JAVA_HOME%/jre/lib/security/cacerts
        -storepass changeit

%JAVA_HOME%是指操作系统中的环境变量JAVA的环境目录,storepass指输入密码,java中cacerts证书库默认密码为changeit

将导入的jks证书复制到spring boot的src/main/resources/ 目录下

server.port= 8443
server.ssl.key-store = classpath:server.jks
server.ssl.key-store-password = mypassword

注意:

  • -alias server的 server名称是制作CSR时生成的私钥文件名。
  • 如果报错“java.lang.Exception: Input not an X.509 certificate”,请检查证书是否为x.509标准的证书(不含私钥、和中级证书)

3、总结

在针对JAVA项目做SSL部署时,方式大同小异, 只要确保证书路径(服务器绝对路径和 classpath 类路径)、证书格式(pfx/p12和jks)正确即可完成SSL在JAVA项目中的部署。

相关文章