通常情况下(实际上,几乎总是如此!)签名不仅覆盖证书上的可分辨名称,还包括其他所有内容(序列号、到期日期等)。
因此,虽然缩小证书大小并不难,但这将立即使签发者无效。
然而,在某些情况下,可以完全放弃/忽略证书的签名部分,只关注公钥。
使用类似于以下内容:
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密钥;或者几百字节的基于椭圆曲线的密钥。