文章目录
前言
一般商用TLS证书费用较高,如果是内部测试环境,自签名证书完全够用了,但是自签名证书在使用中还是有一些注意的地方,例如java程序,在使用自签名证书会遇到不信任问题,需要手动导入。
一、自签证书生成
自签证书是否需要创建CA
- 自签名证书:用户只是为自己创建和签名一个证书,没有创建CA。这种证书适用于简单的、小规模的环境,或者测试和开发阶段
- 带CA的自签名证书:用户不仅为自己创建证书,还创建了自己的CA,然后使用该CA签名其证书。这种证书适用于需要多个证书并且需要统一管理和验证的场景,具有较好的扩展性。例如k8s证书。
不带CA,自签证书
- 使用 OpenSSL 生成一个私钥文件(server.key):
openssl genrsa -out server.key 2048
- 创建证书签署请求(CSR)
openssl req -nodes -new -key server.key -out server.csr
注意:前两步可以用下面一步直接执行,而且不需要交互:
openssl req -nodes -new -subj "/C=CN/ST=BeiJing/L=BeiJing/O=threedog/OU=threedog/CN=*.cuiwin.top" -keyout server.key -out server.csr
- 颁发证书
openssl x509 -req -sha256 -days 3650 -in server.csr -signkey server.key -out server.crt
[root@test20 certs]# ll
total 12
-rw-r--r-- 1 root root 1306 Dec 30 21:59 server.crt
-rw-r--r-- 1 root root 1058 Dec 30 21:58 server.csr
-rw-r--r-- 1 root root 1679 Dec 30 21:53 server.key
2.带CA,自签证书
二、自签证书部署
三、证书分析查看
浏览器直接点击
openssl
查看证书是否过期
openssl x509 -in ./server.crt -noout -text | grep 'Not'
curl
curl -Ivvv https://www.baidu.com
[root@test20 ~]# curl -Ivvv https://www.baidu.com
* About to connect() to www.baidu.com port 443 (#0)
* Trying 110.242.68.4...
* Connected to www.baidu.com (110.242.68.4) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* Server certificate:
* subject: CN=baidu.com,O="Beijing Baidu Netcom Science Technology Co., Ltd",L=beijing,ST=beijing,C=CN
* start date: Jul 08 01:41:02 2024 GMT
* expire date: Aug 09 01:41:01 2025 GMT
* common name: baidu.com
* issuer: CN=GlobalSign RSA OV SSL CA 2018,O=GlobalSign nv-sa,C=BE
> HEAD / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: www.baidu.com
> Accept: */*
openssl s_client
s_client 是 OpenSSL 工具包中的一个命令行工具,用于创建一个到远程服务器的安全连接,并显示连接的详细信息。它可以用来测试 HTTPS 服务器的配置,查看证书链,以及通过 HTTPS 隧道传输数据。
openssl s_client -connect www.baidu.com:443
Java报错
javax net.ssl. SSL Hand shake Exception:sun.security,validatorException:PKIX path building
failed:sun security,prorider.certpathSunCert Path BuilderException=unable to find ralid
certification path to requested target
解决报错:
- 导入证书
keytool -import -noprompt -alias caskeystore -keystore $JAVA_HOME/jdk
8u202-b08/jre/lib/security/cacerts -file /data/ssl/server.crt -storepass changeit
- 检查导入
keytool -list -storepass changeit -keystore $JAVA_HOME/jdk
8u202-b08/jre/lib/security/cacerts | grep caskeyst