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

相关推荐
半桔6 分钟前
【IO多路转接】epoll 高性能网络编程:从底层机制到服务器实战
linux·运维·服务器·网络·php
恒创科技HK26 分钟前
香港100G高防服务器的防御力如何?
运维·服务器
Hoxy.R29 分钟前
iSCSI 磁盘扩容后节点不刷新容量的问题解决(StarWind + Linux)
linux·运维·服务器
CV小白进阶路30 分钟前
【无标题】Vscode 报错 got bad result from install script无法远程链接服务器
服务器·ide·vscode
lytao12338 分钟前
使用 dnsmasq 搭建本地 DNS 服务器完整指南
运维·服务器·dns
尽兴-43 分钟前
macOS 系统下 Chrome 浏览器安装 HTTPS 证书完整指南
chrome·macos·https·证书·ssl·pem·crt
心随雨下1 小时前
Tomcat日志配置与优化指南
java·服务器·tomcat
YJlio1 小时前
PsService·下(7.21):Find/SetConfig 与服务的启动/停止/重启/暂停/恢复
linux·运维·服务器
草莓熊Lotso1 小时前
C++ 继承特殊场景解析:友元、静态成员与菱形继承的底层逻辑
服务器·开发语言·c++·人工智能·经验分享·笔记·1024程序员节
_OP_CHEN2 小时前
Linux系统编程:(六)深入理解 Linux 软件包管理器——从原理到 yum 实战全攻略
linux·运维·服务器·yum·软件包管理器·linux生态