首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用中间CA实现自签名证书的制作

如何使用中间CA实现自签名证书的制作
EN

Security用户
提问于 2023-02-22 16:16:42
回答 1查看 132关注 0票数 1

我试图通过实例了解ssl信任链是如何工作的。我想也许openssl会是一个很好的教育工具。但是我在练习的时候遇到了一些问题,我对如何接近我的教育感到迷茫。

下面是我尝试为根CA、中间CA和最终用户设置证书的一个实验(尽管我花了几个小时的谷歌搜索和观看YouTube视频,但我仍然对这些术语的含义没有信心,因此我希望在下面进行实验)。

我创建并运行了这样一个bash脚本:

代码语言:javascript
复制
# 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和证书链。但由于各种原因,这些命令都失败了:

代码语言:javascript
复制
>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

不过,此命令运行良好。

代码语言:javascript
复制
>openssl verify -CAfile root.crt intermediate.crt
intermediate.crt: OK

我是否完全误解了中间CA是如何工作的,还是信任链是如何工作的?

EN

回答 1

Security用户

回答已采纳

发布于 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 (或您的配置所处的位置)解决了这一问题,这些工作就很好了:

代码语言:javascript
复制
$ 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参数:

代码语言:javascript
复制
$ openssl verify -CAfile intermediate.crt -partial_chain enduser.crt
enduser.crt: OK
票数 3
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/268628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档