首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试将扩展从CSR复制到LibreSSL证书时发生的x509错误

尝试将扩展从CSR复制到LibreSSL证书时发生的x509错误
EN

Server Fault用户
提问于 2020-01-04 02:11:06
回答 1查看 834关注 0票数 0

我正在尝试创建一个x509证书,其中包含来自CSR的一组非常特定的x509v3扩展(已经设置了这些扩展)。我有一个PEM形式的CSR (?)看起来是这样的:

代码语言:javascript
复制
-----BEGIN CERTIFICATE REQUEST-----
MIIEjDCCAnQCAQAwFT...
...EQFqw==
-----END CERTIFICATE REQUEST-----

我试图通过libressl (我在Mac上)对其进行签名,并使用已安装的openssl工具用我已经信任的计算机上的根CA证书对请求进行签名。这一过程如下:

代码语言:javascript
复制
echo "-----BEGIN CERTIFICATE REQUEST-----\nMIIE...qw==\n-----END CERTIFICATE REQUEST-----\n" | openssl x509 -req -days 3650 -CA trusted_cert.pem -CAkey trusted_key.pem -CAcreateserial -out output_crt.pem -sha512 -extfile /usr/local/etc/openssl/openssl.cnf -extensions my_ca

libressl与openssl并不是100%的“覆盖兼容”(这可能导致了这一问题)。因此,在openssl有-config标志的地方,libressl似乎有一个-extfile标志。一旦我将代码从libressl迁移到openssl,这已经咬了我一口。

my_ca中的openssl.cnf部分如下所示:

代码语言:javascript
复制
[ my_ca ]

# Extension copying option: use with caution.
copy_extensions = copy

default_days    = 365                   # how long to certify for
default_crl_days= 30                    # how long before next CRL
default_md      = default               # use public key default MD
preserve        = no                    # keep passed DN ordering

# A few difference way of specifying how similar the request should look
# For type CA, the listed attributes must be the same, and the optional
# and supplied fields are just that :-)
policy          = policy_match

根据我对openssl的理解(并且,阅读这些行,libressl),本节中的copy_extensions = copy应该将CSR中的扩展复制到输出x509证书中。但是,当使用上面的echo表单调用libressl时,我会得到以下错误:

代码语言:javascript
复制
Error Loading extension section my_ca
4592432748:error:22FFF082:X509 V3 routines:func(4095):unknown extension name:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22.260.1/libressl-2.6/crypto/x509v3/v3_conf.c:127:
4592432748:error:22FFF080:X509 V3 routines:func(4095):error in extension:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22.260.1/libressl-2.6/crypto/x509v3/v3_conf.c:96:name=copy_extensions, value=copy

我假设,只要我能够让libressl加载该部分,它就会理解copy_extensions指令--情况似乎并非如此。如何编写配置文件,以便libressl将扩展名从CSR复制到生成的证书中?

作为参考,我的libressl版本如下:

代码语言:javascript
复制
openssl version -a
LibreSSL 2.6.5
built on: date not available
platform: information not available
options:  bn(64,64) rc4(16x,int) des(idx,cisc,16,int) blowfish(idx)
compiler: information not available
OPENSSLDIR: "/private/etc/ssl"
EN

回答 1

Server Fault用户

回答已采纳

发布于 2020-01-06 23:50:36

所以@dave_thompson_085给我指明了正确的方向,我想出了如何让它发挥作用,尽管这有点令人失望。

copy_extensions不像我想的那样工作。它看起来(根据戴夫的说法),它根本不适用于x509 -req

相反,我解决这个问题的方法是使用适当的权限创建openssl文件的一个小部分,然后用传入extensions参数的新部分对CSR进行签名。下面是一个截短的示例:

代码语言:javascript
复制
echo "-----BEGIN CERTIFICATE REQUEST-----\nMI...E=\n-----END CERTIFICATE REQUEST-----\n" | openssl x509 -req -days 3650 -CA my_cert.pem -CAkey my_key.pem -CAcreateserial -out new_cert.pem -sha512 -extfile /usr/local/etc/openssl/openssl.cnf -extensions my_ca

部分来自openssl.cnf文件:

代码语言:javascript
复制
...
####################################################################
[ my_ca ]

basicConstraints = critical,CA:TRUE
keyUsage = critical, digitalSignature, keyEncipherment, keyCertSign
####################################################################
...
票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/997581

复制
相关文章

相似问题

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