如何信任自签 CA 证书
原理
证书中X509v3 extensions
的X509v3 Authority Key Identifier
必须与CA keyid
一致才能正常验证证书。
openssl x509 -in all.xiexianbin.cn.crt -text -noout
...
X509v3 extensions:
X509v3 Authority Key Identifier:
keyid:A3:AA:4D:FB:39:BC:15:59:68:F6:3A:D0:DE:10:2A:10:4C:F9:8F:6B
X509v3 Basic Constraints:
CA:FALSE
X509v3 Key Usage:
Digital Signature, Non Repudiation, Key Encipherment, Data Encipherment
X509v3 Subject Alternative Name:
DNS:xiexianbin.cn, DNS:*.xiexianbin.cn, DNS:kb.cx, DNS:*.kb.cx
...
openssl s_client -showcerts -servername xiexianbin.cn -connect xiexianbin.cn:443
openssl s_client -showcerts -connect xiexianbin.cn:443
Windows
信任CA证书
- 在
证书
页面导出操作
点击详细信息
-> 复制到文件(C)...
-> 下一步
-> 在证书导出向导
选择DER编码二进制X.509(.CER(D))
-> 下一步
-> 确认浏览证书导出位置 -> 下一步
-> 完成
- 安装证书
右键
上一步导出的证书文件 -> 选择存储位置
(推荐本地计算机) -> 下一步
后,选择将所有的证书都放入夏磊存储
-> 浏览
选择受信任的证书颁发机构
-> 下一步
-> 完成
查看本地CA证书
ssl 在网站中越来越普及,那如何查找ssl的根证书呢?
打开证书管理器
开始运行中输入certmgr.msc
选择受信任的根证书颁发机构,可以看到右边列表中显示出本机的所有受信任的根证书信息。
导出
证书
Mac信任CA证书
打开钥匙串访问
,左侧钥匙串
选择系统
,种类
选择证书
,然后把刚才生成的根证书托入(根证书是cacert.crt
)。
双击此证书,在信任
设置中,选择始终信任
。
访问效果:
- 直接将
证书图片
拖拉至桌面
即可导出证书文件
- 双击导入并在钥匙串访问设置中信任该证书,或直接使用下列命令行导入
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain <导出证书文件夹的路径及文件名>
Linux信任CA证书
curl工具可以在linux上模拟发送请求,但当它去访问https加密网站时就会提示如下信息:
# curl https://www.xiexianbin.cn/
curl: (60) Peer certificate cannot be authenticated with known CA certificates
More details here: http://curl.haxx.se/docs/sslcerts.html
curl performs SSL certificate verification by default, using a "bundle"
of Certificate Authority (CA) public keys (CA certs). If the default
bundle file isn't adequate, you can specify an alternate file
using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
the bundle, the certificate verification probably failed due to a
problem with the certificate (it might be expired, or the name might
not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
the -k (or --insecure) option.
CentOS/Redhat
# pem 转 cert
openssl x509 -in cacert.crt -inform PEM -out cacert.crt
# install tools
yum install -y ca-certificates
# 将cacert.crt根证书到/etc/pki/ca-trust/source/anchors目录中
update-ca-trust
Ubuntu
Ubuntu 安装 CA 证书
- 浏览器,以 chrome 为例,打开 chrome
chrome://settings/certificates
的 Authorities/授权机构
页面点击 Import/导入
自签发的 CA 证书
- 系统安装 CA
$ apt install -y ca-certificates
# 添加证书
$ cp ca.crt /usr/local/share/ca-certificates
$ update-ca-certificates
# 删除证书
$ rm /usr/local/share/ca-certificates/ca.crt
$ update-ca-certificates
Java信任其他CA证书
- 准备证书:通过浏览器下载“中级证书颁发机构”的证书,采用如下方法转化为pem格式
- 转化为pem
openssl x509 -inform der -in Lets-Encrypt-Authority-X3.cer -out Lets-Encrypt-Authority-X3.pem
# wget https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem
keytool -trustcacerts -keystore "<$JAVA_HOME>/lib/security/cacerts" -storepass changeit -noprompt -importcert -alias lets-encrypt-x3-cross-signed -file "/tmp/lets-encrypt-x3-cross-signed.pem"
其他方式自签证书信任方法
证书签发
openssl req -x509 -days 365 -out ./cert/all.xiexianbin.cn.crt -keyout ./cert/all.xiexianbin.cn.key \
-newkey rsa:2048 -nodes -sha256 \
-subj "/CN=*.xiexianbin.cn" -extensions EXT -config <( \
printf "[dn]\nCN=*.xiexianbin.cn\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:*.xiexianbin.cn\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")
该方式生成的证书中X509v3 extensions
没有X509v3 Authority Key Identifier
信息
openssl x509 -in all.xiexianbin.cn.crt -text -noout
...
X509v3 extensions:
X509v3 Subject Alternative Name:
DNS:*.xiexianbin.cn
X509v3 Key Usage:
Digital Signature
X509v3 Extended Key Usage:
TLS Web Server Authentication
...
证书查看
在chrome
浏览器上,点击左上角的惊叹号区块,再出现的菜单栏中点击证书(无效)