和Tomcat以及Jetty等Java类服务器配置安装SSL数字证书一样,Spring Boot(内置tomcat)也是支持pfx(p12)格式部署和keystore (kjs)方式部署SSL数字证书,详细如下:
和Tomcat以及Jetty等Java类服务器配置安装SSL数字证书一样,Spring Boot(内置tomcat)也是支持pfx(p12)格式部署和keystore (kjs)方式部署SSL数字证书,详细如下:
一、准备材料
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签发的证书需要购买数字证书,/年的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项目中的部署。