5

我在使用 openssl 创建包含用于测试的 crl 分发点的 x509 证书时遇到问题。

我检查了文档并找到了用于此目的的配置设置 crlDistributionPoints。不幸的是,openssl 总是生成 x509 版本 1 证书,而不是带有 crl 分发点的版本 3 证书。我确定我的命令或配置有问题,但仔细阅读文档并尝试配置并没有帮助。考虑了配置文件中的其他设置,因此我确定文件本身被 openssl 使用。

我正在使用命令

openssl x509 -req -in $NAME.csr -out certs/$NAME.pem -days 3650 -CAcreateserial -CA cacert.pem -CAkey private/cakey.pem -CAserial serial

我正在使用以下配置文件:

[ ca ]
default_ca              = CA_default

[ CA_default ]

dir                     = /home/ca
database                = $dir/index.txt
new_certs_dir           = $dir/newcerts

certificate             = $dir/cacert.pem
serial                  = $dir/serial
private_key             = $dir/private/cakey.pem
RANDFILE                = $dir/private/.rand

default_days            = 3650
default_crl_days        = 30
default_md              = md5

policy                  = policy_any
email_in_dn             = no

name_opt                = ca_default
cert_opt                = ca_default
copy_extensions         = none

x509_extensions         = extensions_section

[ extensions_section ]

crlDistributionPoints=URI:http://example.com/crl.pem

[ policy_any ]
countryName             = supplied
stateOrProvinceName     = optional
organizationName        = optional
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional

有任何想法吗?

4

1 回答 1

15

openssl x509不会读取您在上面在配置文件中指定的扩展配置。

您可以crlDistributionPoints(至少)通过以下两种方式进入您的证书:

  1. 使用openssl ca而不是x509签署请求。-config如果您的配置不在默认位置,则根据需要传递。如果您省略以开头的选项,则可以使用您提供的大多数命令-CA

    openssl ca -in $NAME.csr -out certs/$NAME.pem -days 3650

  2. 使用您在问题中提供的命令,但首先创建一个包含您的 v3 扩展名的文件(即mycrl.cnf);将选项添加-extfile mycrl.cnf到您的通话中openssl x509

    openssl x509 -req -in $NAME.csr -out certs/$NAME.pem -days 3650 \
      -CAcreateserial -CA cacert.pem -CAkey private/cakey.pem \
      -CAserial serial -extfile mycrl.cnf`
    

    其中mycrl.cnf包含以下内容:

    crlDistributionPoints=URI:http://example.com/crl.pem

openssl ca该命令可能更适合您想要执行的操作,因为您会发现大多数示例都依赖于该命令,该命令利用 openssl.cnf 中的各种设置进行 v3 扩展。

顺便说一句:建议在证书中使用 MD5 消息摘要。

以前 SHA1 是 MD5 的建议替代品,但现在也已弃用。您可以指定在请求和签名操作中使用的消息摘要,并且可以使用 列出支持的消息摘要openssl list-message-digest-commands

例如,您可以在签名请求时使用 SHA256-md sha256选项openssl ca(或default_md=sha256在您的[CA_default]配置部分中设置)。

于 2012-08-19T02:27:44.373 回答