1、在springboot配置文件中配置ssl属性
#https配置
server.ssl.enabled = true
server.ssl.certificate=/opt/app/test/ssl/mytest/server.crt
server.ssl.certificate-private-key=/opt/apptest/ssl/mytest/server.key
server.ssl.trust-certificate=/opt/app/test/ssl/mytest/ca.crt
server.ssl.key-store-password=ENC(/LRYPqBuCDYOPjCF8ydQzg==)
server.ssl.protocol=TLS
server.ssl.ciphers=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,SSL_RSA_WITH_RC4_128_SHA
#ssl认证 need:双向,want:单项,none不认证
server.ssl.client-auth=want
2、生成证书
#!/bin/bash
SSL_HOST=$(ifconfig -a eth0|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:")
SSL_DIR="/opt/app/test/ssl/mytest"
SSL_PWD="123456"
2.1、生成CA私钥,ca.key
openssl genrsa -out ${SSL_DIR}/ca.key 4096
2.2、生成CA证书。(自己伪造证书办法机构)ca.crt
openssl req -new -x509 -days 365 -key ${SSL_DIR}/ca.key -out ${SSL_DIR}/ca.crt -subj "/C=CN/ST=SX/L=XA/O=SBR/OU=DEV/CN=${SSL_HOST}/"
2.3、生成服务端私钥。server.key
openssl genrsa -out ${SSL_DIR}/server.key 4096
2.4、生成服务端证书请求。server.csr
openssl req -new -key ${SSL_DIR}/server.key -out ${SSL_DIR}/server.csr -subj "/C=CN/ST=SX/L=XA/O=SBR/OU=DEV/CN=${SSL_HOST}/" -passin pass:${SSL_PWD}
2.5、生成服务端证书。server.crt
openssl x509 -req -in ${SSL_DIR}/server.csr -CA ${SSL_DIR}/ca.crt -CAkey ${SSL_DIR}/ca.key -CAcreateserial -out ${SSL_DIR}/server.crt -days 365
2.6、生成客户端私钥。client.key
openssl genrsa -out ${SSL_DIR}/client.key 4096
2.7、生成客户端证书请求。client.csr
openssl req -new -key ${SSL_DIR}/client.key -out ${SSL_DIR}/client.csr -subj "/C=CN/ST=SX/L=XA/O=SBR/OU=DEV/CN=${SSL_HOST}/" -passin pass:${SSL_PWD}
2.8、生成客户端证书。client.crt
openssl x509 -req -in ${SSL_DIR}/client.csr -CA ${SSL_DIR}/ca.crt -CAkey ${SSL_DIR}/ca.key -CAcreateserial -out ${SSL_DIR}/client.crt -days 365
2.9、生成包含私钥的pfx客户端证书。client.pfx。执行后会提示输入密码
openssl pkcs12 -export -inkey ${SSL_DIR}/client.key -in ${SSL_DIR}/client.crt -passout pass:${SSL_PWD} -out ${SSL_DIR}/client.pfx
2.10、生成包含私钥的p12客户端证书。client.p12。执行后会提示输入密码
openssl pkcs12 -export -inkey ${SSL_DIR}/client.key -in ${SSL_DIR}/client.crt -CAfile ${SSL_DIR}/ca.crt -passout pass:${SSL_PWD} -out ${SSL_DIR}/client.p12
3、使用使用PFX证书进行Java双向认证。
3.1、下载openssl工具,按照上述方式生成证书。
3.2、将生成的client.pfx格式证书在客户端进行安装。安装时会提示需要输入密码
3.3、在springboot项目中的配置文件中设置server.ssl.client-auth=want。如果在没有安装证书的情况下会提示
4、双向认证流程
5、名词解释
ca.crt:根证书。所有证书的都是基于ca.crt证书生成的
ca.key: ca证书的私钥。
.pfx:PFX证书是一种采用PKCS#12标准格式的文件,也称为Personal Information Exchange格式,是一种包含公钥和私钥的加密证书格式。PFX证书通常用于存储私钥和公钥信息,包括公钥证书、私钥及其相关的证书链等,用于身份验证和加密通信。PFX证书通常使用.pfx或.p12作为文件扩展名。
.p12:P12证书实际上与PFX证书相同。P12是PFX证书的另一种表述或缩写。两者都是基于PKCS#12标准的加密证书格式,包含公钥和私钥等信息