我试图通过实例了解ssl信任链是如何工作的。我想也许openssl会是一个很好的教育工具。但是我在练习的时候遇到了一些问题,我对如何接近我的教育感到迷茫。
下面是我尝试为根CA、中间CA和最终用户设置证书的一个实验(尽管我花了几个小时的谷歌搜索和观看YouTube视频,但我仍然对这些术语的含义没有信心,因此我希望在下面进行实验)。
我创建并运行了这样一个bash脚本:
# make certs for root ca
openssl genrsa -out root.key 2048
openssl req -x509 -sha256 -nodes -extensions v3_ca -key root.key -subj "/C=CA/ST=ON/O=HelloWorld/CN=root.example.com" -days 3650 -out root.crt
# make certs for intermediate ca
openssl genrsa -out intermediate.key 2048
openssl req -new -sha256 -nodes -key intermediate.key -subj "/C=CA/ST=ON/O=HelloWorld/CN=intermediate.example.com" -out intermediate.csr
openssl x509 -req -extensions v3_ca -in intermediate.csr -CA root.crt -CAkey root.key -CAcreateserial -out intermediate.crt -days 500 -sha256
# make certs for end user
openssl genrsa -out enduser.key 2048
openssl req -new -sha256 -nodes -key enduser.key -subj "/C=CA/ST=ON/O=HelloWorld/CN=enduser.example.com" -out enduser.csr
openssl x509 -req -in enduser.csr -CA intermediate.crt -CAkey intermediate.key -CAcreateserial -out enduser.crt -days 500 -sha256然后,我试图验证enduser.crt和证书链。但由于各种原因,这些命令都失败了:
>openssl verify -CAfile intermediate.crt enduser.crt
C = CA, ST = ON, O = HelloWorld, CN = intermediate.example.com
error 2 at 1 depth lookup: unable to get issuer certificate
error enduser.crt: verification failed
>openssl verify -CAfile <(cat intermediate.crt root.crt) enduser.crt
C = CA, ST = ON, O = HelloWorld, CN = intermediate.example.com
error 24 at 1 depth lookup: invalid CA certificate
error enduser.crt: verification failed
>openssl verify -CAfile <(cat root.crt intermediate.crt) enduser.crt
C = CA, ST = ON, O = HelloWorld, CN = intermediate.example.com
error 24 at 1 depth lookup: invalid CA certificate
error enduser.crt: verification failed不过,此命令运行良好。
>openssl verify -CAfile root.crt intermediate.crt
intermediate.crt: OK我是否完全误解了中间CA是如何工作的,还是信任链是如何工作的?
发布于 2023-02-22 16:44:26
openssl x509 -req -extensions v3_ca -in intermediate.csr -CA root.crt -CAkey root.key -CAcreateserial -out intermediate.crt -days 500 -sha256
对于较新版本的openssl (3.0),您将得到以下警告:
警告:忽略没有-extensions的-extfile选项
虽然旧的openssl版本(即1.1.1)缺少此警告,但它仍然忽略参数。这将导致intermediate.crt没有基本约束CA:true,因此它不能作为CA证书使用。
一旦通过添加-extfile /etc/ssl/openssl.conf (或您的配置所处的位置)解决了这一问题,这些工作就很好了:
$ openssl verify -CAfile <(cat intermediate.crt root.crt) enduser.crt
enduser.crt: OK
$ openssl verify -CAfile <(cat root.crt intermediate.crt) enduser.crt
enduser.crt: OK不过,它仍然无法仅通过使用enduser.crt来验证intermediate.crt。这是因为中间证书不是自签名根证书,即不属于信任链的末尾。要将这样的中间证书视为信任链的可接受端,需要使用-partial_chain参数:
$ openssl verify -CAfile intermediate.crt -partial_chain enduser.crt
enduser.crt: OKhttps://security.stackexchange.com/questions/268628
复制相似问题