即使你可以哄骗你的证书生成代码有一个更长的 CN,它也是需要改变的客户端,其中大多数你无法控制。客户很可能会拒绝 CN 太长的证书,然后您将根本没有证书。
如评论中所述,您可以(并且应该)将该域名和其他域名放入主题备用名称扩展名中,并将 CN 留空。不是整个“主题”,而只是其中的 CN 部分。
如果您想像 @Chris Cogdon 提到的那样“哄骗”证书生成代码,这并不难。我需要将其作为逆向工程挑战的一部分,因此它违反标准这一事实并不重要。我完全同意你不应该这样做的信息,但我仍然会解释我是如何做到的,因为花了一些时间才弄清楚。
以下是(粗略的)步骤:
/crypto/asn1/a_mbstr.c在您喜欢的编辑器中打开 if ((maxsize > 0) && (nchar > maxsize)) {
ASN1error(ASN1_R_STRING_TOO_LONG);
ERR_asprintf_error_data("maxsize=%ld", maxsize);
return -1;
}
Run Code Online (Sandbox Code Playgroud)
并将其注释掉。对于 2.6.0 版本,此内容位于第 155-159 行。通过删除这些行,您将删除最大 CN 长度检查。
按照文件中的说明README构建二进制文件。当我在 macOS 上构建时,我不需要安装任何库,但 YMMV 除外。我使用cmake它将新的 openssl 二进制文件放入/build/apps/openssl
使用命令行标志生成 CSR(请阅读:不是交互式工具 - 它有一个特殊的检查,不会通过此修改进行修补!)。
例如:
/build/apps/openssl/openssl req -new -newkey rsa:2048 -nodes -out a.csr -keyout a.key -subj "/CN=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
openssl二进制文件(或修改后的二进制文件,如果需要),签署 CSR:openssl x509 -req -in a.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out a.crt -days 500 -sha256之后,您应该就可以使用精彩的不合规证书了。正如许多人在评论中以及 Chris Cogdon 所指出的,使用 CN 长度超过 64 个字符的证书存在相当多的问题(macOScurl无法与使用这些证书的服务器通信,Wireshark 在解析器显示中截断 CN 等)。然而,该证书确实满足了我的需要,因此我至少可以确认这些证书在某些特定情况下是有效的。
| 归档时间: |
|
| 查看次数: |
8789 次 |
| 最近记录: |