spring-boot https证书双向认证配置

文章目录

    • [1. 创建CA证书](#1. 创建CA证书)
    • [2. 签发服务端证书](#2. 签发服务端证书)
    • [3. 签发客户端证书](#3. 签发客户端证书)
    • [4. 生成PKCS12服务端证书](#4. 生成PKCS12服务端证书)
    • [5. 配置spring-boot工程](#5. 配置spring-boot工程)
    • [6. 验证请求](#6. 验证请求)
    • 源代码地址github
    • 源代码地址gitee

本文主要介绍在spring-boot工程中配置https证书双向认证。包含生成自签名证书命令,配置yml等。

注意:

  • 该文章使用自签名证书,仅作为开发验证使用,实际现网场景请从CA机构申请证书。
  • 文章中的命令均在linux环境下执行。
  • openssl版本为 OpenSSL 1.1.1k FIPS 25 Mar 2021。
  • keytool对应jre版本为 1.8.0_401。

1. 创建CA证书

创建CA证书。相关文件:

  • rootca.key CA证书私钥。
  • rootca.crt CA证书。
  • rootca.p12 PKCS12格式的信任证书库。
  • truststore.jks JKS格式的信任证书库。
shell 复制代码
# 1. 创建CA私钥 RootCaKey@2024 生成 rootca.key
openssl genpkey -aes256 -algorithm RSA -pkeyopt rsa_keygen_bits:4096 -out rootca.key -pass pass:'RootCaKey@2024'
# 2. 创建CA证书请求 生成 rootca.crt
openssl req -x509 -days 3650 -sha256 -key rootca.key -passin pass:'RootCaKey@2024' -out rootca.crt -subj "/C=CN/CN=demorootca.demo.com"
## 生成并导入信任证书库 PKCS12 生成 rootca.p12 TrustStore@2024
keytool -import -noprompt -trustcacerts -alias rootca -file rootca.crt -keystore rootca.p12 -storetype PKCS12 -storepass 'TrustStore@2024'
### 查看
keytool -list -v -keystore rootca.p12 -storetype PKCS12 -storepass 'TrustStore@2024'
## 生成并导入信任证书库 JKS 生成 truststore.jks
keytool -import -noprompt -trustcacerts -alias rootca -file rootca.crt -keystore truststore.jks -storetype JKS -storepass 'TrustStore@2024'
### 查看
keytool -list -v -keystore truststore.jks -storetype JKS -storepass 'TrustStore@2024'

2. 签发服务端证书

生成服务端证书 server.crt 并且使用ca证书签发。可以使用命令验证。

shell 复制代码
openssl genpkey -aes256 -algorithm RSA -pkeyopt rsa_keygen_bits:4096 -out server.key -pass pass:'ServerKey@2024'
openssl req -new -key server.key -passin pass:'ServerKey@2024' -out server.csr -subj "/C=CN/CN=server.demo.com"
openssl x509 -req -in server.csr -CA rootca.crt -CAkey rootca.key -passin pass:'RootCaKey@2024' -CAcreateserial -out server.crt -days 3650 -sha256
## 使用CA证书验证服务端证书
openssl verify -verbose -CAfile rootca.crt server.crt

3. 签发客户端证书

生成客户端证书 client.crt 并且使用ca证书签发。可以使用命令验证。

shell 复制代码
openssl genpkey -aes256 -algorithm RSA -pkeyopt rsa_keygen_bits:4096 -out client.key -pass pass:'ClientKey@2024'
openssl req -new -key client.key -passin pass:'ClientKey@2024' -out client.csr -subj "/C=CN/CN=client.demo.com"
openssl x509 -req -in client.csr -CA rootca.crt -CAkey rootca.key -passin pass:'RootCaKey@2024' -CAcreateserial -out client.crt -days 3650 -sha256
## 使用CA证书验证客户端证书
openssl verify -verbose -CAfile rootca.crt client.crt

4. 生成PKCS12服务端证书

通过 openssl 命令生成服务端用的证书 server.p12 和客户端用到的证书 client.p12。可以使用 keytool 命令查看。

  • server.key+server.crt+rootca.crt -> server.p12

  • client.key+client.crt+rootca.crt -> client.p12

shell 复制代码
openssl pkcs12 -export -inkey server.key -passin pass:'ServerKey@2024' -in server.crt -chain -CAfile rootca.crt -out server.p12 -password pass:'ServerKeyStore@2024'
## 查看 server.p12证书
keytool -list -v -keystore server.p12 -storepass 'ServerKeyStore@2024'
# 生成PKCS12客户端证书
openssl pkcs12 -export -inkey client.key -passin pass:'ClientKey@2024' -in client.crt -chain -CAfile rootca.crt -out client.p12 -password pass:'ClientKeyStore@2024'
## 查看 client.p12 证书
keytool -list -v -keystore client.p12 -storepass 'ClientKeyStore@2024'

5. 配置spring-boot工程

将前边生成的证书 server.p12,truststore.jks,rootca.p12文件,拷贝到 src/main/resources/cert/ 目录下。并修改 application.yml,内容如下:

yaml 复制代码
server:
  ssl:
    enabled: true
    key-store: classpath:cert/server.p12
    key-store-password: 'ServerKeyStore@2024'
    key-store-type: PKCS12
    key-store-provider: SUN
    enabled-protocols: TLSv1.2,TLSv1.3
    trust-store: classpath:cert/truststore.jks
#    trust-store: classpath:cert/rootca.p12
    trust-store-password: 'TrustStore@2024'
    trust-store-type: PKCS12
    trust-store-provider: SUN
    client-auth: need
  servlet:
    context-path: /SpringBoot2Demo
  port: 8888

logging:
  level:
    root: info

6. 验证请求

使用curl命令和使用postman均可以验证,需要配置客户端证书。

shell 复制代码
# 使用命令验证
curl -k --cert-type P12 --cert ./client.p12:'ClientKeyStore@2024' --location --request GET 'https://localhost:8888/SpringBoot2Demo/demo/current'

使用postman的时候,需要将 Settings->General->REQUEST->SSL certificate verification 开关关掉,即不校验SSL服务端证书。

源代码地址github

源代码地址gitee

相关推荐
知白守黑2679 分钟前
Linux磁盘阵列
linux·运维·服务器
TPBoreas3 小时前
Jenkins启动端口修改失败查找日志
运维·服务器·jenkins
正在努力的小河5 小时前
Linux设备树简介
linux·运维·服务器
小张快跑。5 小时前
Tomcat下载、安装及配置详细教程
java·服务器·tomcat
没有不重的名么6 小时前
Tmux Xftp及Xshell的服务器使用方法
服务器·人工智能·深度学习·机器学习·ssh
wdxylb6 小时前
云原生俱乐部-杂谈1
服务器·云原生
赏点剩饭7789 小时前
linux中的hostpath卷、nfs卷以及静态持久卷的区别
linux·运维·服务器
神鸟云9 小时前
DELL服务器 R系列 IPMI的配置
linux·运维·服务器·网络·边缘计算·pcdn
herderl10 小时前
**僵尸进程(Zombie Process)** 和**孤儿进程(Orphan Process)**
linux·运维·服务器·网络·网络协议
tomelrg10 小时前
多台服务器批量发布arcgisserver服务并缓存切片
服务器·python·arcgis