使用 openssl 生成和签署证书的证书扩展

使用 openssl 生成和签署证书的证书扩展

参考:

  1. 中间证书的 SSL 配置
  2. 如何将我自己创建的证书颁发机构添加到系统受信任的存储库

为什么我找不到告诉我 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 的存档、序列号的自动增量......

相关内容