参考:
为什么我找不到告诉我 openssl 扩展是什么类型的页面?!
我正在进行相互身份验证,然后当我想在该过程中放置中间证书时,我发现生成和签名的中间证书CA
是自签名的,因为选项-sign-key
.
我阅读了手册页并发现相关:
基本约束。 这是一个多值扩展,指示证书是否为 CA 证书。例如:
basicConstraints=CA:TRUE basicConstraints=CA:FALSE
主要用法: 密钥用法是一个多值扩展,由允许的密钥用法的名称列表组成。支持的名称是:
digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment, keyAgreement, keyCertSign, cRLSign, encipherOnly and decipherOnly.
例子:
keyUsage=digitalSignature, nonRepudiation keyUsage=critical, keyCertSign
critical
我在浏览器证书视图中看到了一个非关键的。我的证书没有这些字段。我还读到,当没有扩展名时,这意味着您的证书被视为根证书和自签名证书。
我想制作四种不同类型的证书:
rootca > serverca > 由服务器 ca 签名的服务器 crt && 由服务器 ca 签名的客户端 crt
在文档中我遇到了这些:
v3_ca 、 v3_用户 、 v3_ca
这些是我问题的答案吗?
我要生成的命令中间钙并用密钥签名rootca
是:
openssl genrsa -out $keyfile $keysize;
openssl req -new -key $keyfile -out $reqfile -passin pass:$pw \
-subj "/C=$country/ST=$state/L=$location/O=$org/CN=$name" 2>&1;
openssl x509 -req -days $days -in $reqfile -out $certfile \
-signkey $cakeyfile 2>&1;
附:
我不使用配置文件,因为我从 bash 脚本运行所有这些操作。
我想知道是否有人可以给我解释扩展,是否可以将它们作为参数而不是从 bash 获取它们(因为它需要打开 bash 脚本并为每次调用我的 bash 进行编辑)。
答案1
简而言之: basicConstraints=CA:TRUE/FALSE
表示该证书是否是 CA 的证书。只有权威机构才能颁发证书。
keyUsage 属性表示允许对证书执行哪些操作。例如,您可以颁发仅用于签名电子邮件的证书。如果您在 Web 服务器中使用此类证书(以向客户端标识服务器),则结果应该是证书不被视为有效 - 因为预期用途是用于签名电子邮件而不是用于标识网站。 (当然会有不同的 CN,但如果不是,它就会按照我描述的方式工作)。
解决您的问题:
rootca - 一些自签名证书
serverca - 由 rootca 签名的 ca 证书 (basicConstraints=CA:TRUE)
servercrt,clientcrt - 由 serverca 签名的普通 CSR
当您作为证书颁发机构签署某些证书时,您应该使用:
openssl ca -CA authority.crt -CAkey authority.key ...
其他选项如-config
, -set_serial
, -days
,...
我从未真正使用过没有配置文件的 CA,因此这可能会回答其他人的问题。我认为应该可以在命令行输入所有参数。
但是,您可以创建更多配置文件(每个权限一个)并在参数中提供它们-config
。这种方法的优点是您将获得所有已发行的 crt 的存档、序列号的自动增量......