Spring Boot 配置ssl证书实现https详细

一.注意事项

域名和服务器IP是一对一绑定的,所以对于一般域名只能对应一个证书,但如果你想把已经购买的并且已经安装在服务器的证书,在其它服务器上再次使用安装证书,前提是购买的域名证书是以通配符(*)开头的域名(例如:*.yyy.12345.com),则可以再多个服务器上安装证书,其它可以安装的服务器域名(可以是test.yyy.12345.com,demo.yyy.12345.com等)。

二.安装证书
1.首先需要安装OpenSSL的开源软件包,OpenSSL可以下cmd命令上下,进行证书相关的操作!貌似很强大!


2.在服务上用openssl生成公钥和私钥
openssl req -new -key myPrivateKey.key -out server.csr
myPrivateKey.key自己保存,server.csr提交给代理商(证书颁发机构)进行签名,证书颁发机构签名完成后会给出 yourDomain.crt文件(需要注意的是证书颁发机构会返回不止一个crt文件,刚开始研究这SSL的时候总以为都是有用的,但后来发现,其实里面的内容都是一样的!具体我也没完全搞明白)

3.或是你已经有购买的证书,已经有 crt证书和.key文件 或其它格式证书(已经有要能得到crt文件或其它格式的证书文件即可,理论上可以去证书颁发机构官网再去重新下载一份)。

4.之前我不太理解为什么会有这么多格式(crt,cer,pem,p12等),其实貌似他们之间是可以互相转换的.你的项目需要用到哪些格式的证书文件,你就进行转换就可以了(具体怎么转,我也是临时去网上查)!
由于我们是在Java环境中,常用的证书形式有p12格式的,jks格式的,所以需要将crt证书进行格式转换,以转换为p12格式为例:

openssl pkcs12 -export -clcerts -in yourDomain.crt -inkey myPrivateKey.key -out server.p12

输入完命令后回车会出现提示输入一个密码,密码非常重要,一定要记住,后面会用到!

这样就生成了spring boot上可以用的私钥格式文件 server.p12
在这个转换的过程中要求设置一个密码,请记住这个密码

然后是给spring boot配置 server.p12证书

首先进入cmd用命令查询一下别名
keytool -list -keystore server.p12

运行该命令会提示你输入密码,就是上面转换格式时提示设置的密码,输入密码后会显示:

秘钥库类型: JKS
秘钥库提供方:SUN

您的密钥库包含 1 个条目


1, 2017-1-7, PrivateKeyEntry
证书指纹 (SHA1) : 《这里是密文》


注意其中这个1这是我们运行这个命令的目的,这个1会在spring配置文件中也会用到


把证书server.p12文件复制到spring boot项目中的 src/main/resources/ 目录下,和application.properties平级,主要得放到classpath目录下,方便查找.

在application.properties中添加如下内容(如果是多数据源,就在相应的数据源下添加)
server.port=8443(要使用的端口号,只要不要和服务器上的其它端口号重复就可以)
server.ssl.key-store:classpath:server.p12(证书存放路径,就是src/main/resources/ 目录下,既classpath目录下,所以前面加上classpath:)
server.ssl.key-store-password: 密码(就是上面之前设置的密码)
server.ssl.keyStoreType: PKCS12(证书格式,PKCS12格式就是指 p12文件,)
server.ssl.keyAlias: 1(这个是别名,是之前查用领查询出的别名1,貌似大部分情况私有秘钥privateKey都是1,)


三.总结

直接在springboot里面配置是为了应对简单的服务,真正的系统会在nginx上配置证书。

猜你喜欢

转载自ymq267.iteye.com/blog/2367772