想象一下,我想成为一个颁发自己证书的证书颁发机构。我希望能够使用我想要的字段生成我自己的证书。无论如何都可以这样做吗?使用 OpenSSL 或任何其他库?我希望能够创建一个非常紧凑的证书,它不再有公钥、签名和标识。最大大约 250 字节的东西,与使用 openSSL 生成的证书(大约 950 字节)相比要少得多。
我希望我的证书拥有的领域是:
使用的算法应该是 ECDSA 224 或 256,带有 SHA 256、到期时间、生成时间,允许撤销证书并携带标识。
想象一下,我想成为一个颁发自己证书的证书颁发机构。我希望能够使用我想要的字段生成我自己的证书。无论如何都可以这样做吗?使用 OpenSSL 或任何其他库?我希望能够创建一个非常紧凑的证书,它不再有公钥、签名和标识。最大大约 250 字节的东西,与使用 openSSL 生成的证书(大约 950 字节)相比要少得多。
我希望我的证书拥有的领域是:
使用的算法应该是 ECDSA 224 或 256,带有 SHA 256、到期时间、生成时间,允许撤销证书并携带标识。
您可以做任何您想做的事情,但是,如果您完全关心安全性,或者如果您对与您自己的应用程序以外的应用程序兼容感兴趣,您不应该这样做。
一般来说,“滚动你自己的”安全解决方案是一个坏主意。有标准是有原因的。它们已经过同行评审、测试并且是透明的。
但只是出于好奇,让我们来看看您的问题需要什么。
首先,您需要一个公钥。目前,安全建议约为 2048 位或 256 字节。仅使用密钥,我们已经超过了您的最大 250 字节。
接下来,您需要一个签名。标准签名将等于密钥大小:2048 位(256 字节)。
那你需要鉴定。你没有说身份证是什么。假设它是字符串“Identity 1”。这占用大约 10 个字节。它也非常有限,不能很好地扩展。
你没有提到你是否想要一个发行者身份,但是让我们再把它扔进 10 个字节。
那么序列号呢?如果这些证书被泄露,您是否想要任何方式来撤销这些证书?你想识别签名算法,还是总是一样?您想要证书上的到期日期吗?使用情况如何?您想区分证书可以扮演的角色吗?所有这些都增加了字节数。
假设您不想要上一段中的任何内容。没有它,我们已经有 532 个字节了。
那么格式化呢?我们可能不能只是将所有这些字节粘在一起。证书值需要某种结构化格式(类似于 X509 中使用的 ASN.1 编码)。这将为总数增加额外的字节。
因此,您可以看到为什么 OpenSSL 生成的证书很容易超过 650 字节。
最重要的是,这取决于您打算将其用于什么。您是否只是在自己的沙盒中玩耍,对兼容性或安全性不感兴趣?然后继续制作自己的证书格式。但除此之外,请遵守标准。