OpenSSL生成自签SSL证书,Springboot配置后实现HTTPS

550 阅读2分钟

使用openssl生成自签名ssl证书,满足网络安全要求;这里案例是springboot项目直接提供https服务,ssl证书需要集成在springboot项目上。

整个流程:创建CA私钥->用CA私钥生成CA根证书->创建ssl私钥->创建ssl证书csr->用CA根证书签署生成ssl证书crt->将crt和key转成p12格式文件->集成p12文件到springboot项目里面

创建CA私钥

mkdir ca # 创建一个目录保存ca私钥和ca证书
cd ca
openssl genrsa -des3 -out CA.key 2048

需要输入密码,记住本次输入的密码,后续会用到

image.png

用CA私钥生成CA根证书

-days表示有效期,这里7300天,20年

openssl req -x509 -new -nodes -key CA.key -sha256 -days 7300 -out CA.crt

image.png

创建ssl私钥

mkdir certs # 创建具体ssl证书
cd certs/
openssl genrsa -out htapplication.key 2048

image.png

创建ssl证书csr

openssl req -new -key htapplication.key -out htapplication.csr

image.png

用CA根证书签署生成ssl证书crt

首先创建域名附加配置信息,新建一个文件,vim cert.ext,将下面代码粘贴后保存编辑生成cert.ext,

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost
IP.2 = 192.168.11.100
DNS.3 = xx.xx.com

# IP.2 = 192.168.11.100    表示https要访问的ip,可以继续往后加IP.4等等也是ip,ssl证书说明可以自签多个ip,这是自签ip的证书

# DNS.3 = xx.xx.com    表示https要访问的域名,可以继续往后加DNS.4都一样是域名,ssl证书说明可以自签多个域名,这是自签域名的证书

签署生成ssl证书crt

--days 表示有效期时间

openssl x509 -req -in htapplication.csr -out htapplication.crt -days 7300 -CAcreateserial -CA ../ca/CA.crt -CAkey ../ca/CA.key -CAserial serial -extfile cert.ext

image.png

将crt和key转成p12格式文件

openssl pkcs12 -export -in htapplication.crt -inkey htapplication.key -out htapplication.p12 -name htapplication [-CAfile xx] 

image.png

集成p12文件到springboot项目里面

复制htapplication.p12到resource目录下面,上面的name要和springboot里面yml中的key-alias保持一致

image.png

# 应用服务 WEB 访问端口
server:
  port: 443
  ssl:
    key-store: classpath:htapplication.p12
    key-store-password: 123456
    key-store-type: PKCS12
    key-alias: htapplication

把此 CA.crt 证书导入需要访问pc的“受信任的根证书颁发机构”中,

后期用此 CA 签署的证书都可以使用, 启动springboot服务浏览输入地址看效果 image.png