从颁发的证书中删除X.509 v3扩展

3

我需要制作轻量级的PKC,因此希望从用户证书中删除x509 v3扩展。我可以使用这个openssl命令来删除v3扩展吗?

openssl x509 -in /usr/local/openca/var/openca/crypto/certs/E841B2655206FA6A3ADA.pem -noout -text -certopt no_extensions -out /usr/local/openca/var/openca/crypto/certs/ -out E841B2655206FA6A3ADA_nov3ext.pem

或者在哪里进行更改以生成x509 v1证书,因为它不包含x509扩展。你能提供一个相关参考链接吗?

感谢您的时间。


5
您知道扩展是证书的一个签名部分,对吗?因此,通过删除它们,您的证书链将无法再进行验证。此外,即使移除了扩展,如果存在唯一标识符,则您的证书也必须至少是v2版本。 - mkl
1个回答

2
通常情况下(实际上,几乎总是如此!)签名不仅覆盖证书上的可分辨名称,还包括其他所有内容(序列号、到期日期等)。
因此,虽然缩小证书大小并不难,但这将立即使签发者无效。
然而,在某些情况下,可以完全放弃/忽略证书的签名部分,只关注公钥。
使用类似于以下内容:
cat somecert.pem | openssl x509 -pubkey -nout

只获取公钥。因此,放弃所有X509,本质上不再具有PKI。只有原始公钥和私钥对。

然后,在您的应用程序中犯下相当不可原谅的错误,发明自己的加密方式 - 并让该公钥的所有者使用其私钥签署类似于NONCE的东西,并验证签名。例如:

# the 'server' sends a nonce to the client
openssl rand -base64 128 > send-to-client

在客户端上,它被签名了。

cat msg-from-server | openssl pkeyutl -inkey privkey.pem -sign | base64 > send-to-server

在服务器上,我们检查这个。

cat msg-from-client | openssl pkeyutl -in pubkey-of-client.pem -verify

然后从那里开始。但是,除非您是一名出色的密码学家和协议设计师,否则像这样的方案(上面的方案肯定如此!)都充满了缺陷和陷阱。

但是理论上,它确实可以让您仅使用几千字节的RSA密钥;或者几百字节的基于椭圆曲线的密钥。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接