Openssl
公用名稱超過 64 字節的 OpenSSL 自簽名證書
我可以使用 openSSL 創建一個自簽名證書,如下所示:
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days XXX -nodes
該介面以某種方式將我的通用名稱限制為 64 個字節。如何創建通用名稱超過 64 個字節的證書?
就我而言,“不要這樣做,這違反標準”的所有答案都非常無益,因為我需要將其作為逆向工程挑戰的一部分。就我而言,它違反標準這一事實並不重要。
以下是(粗略的)步驟:
- 從https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/下載最新的 libressl 源(我使用 2.6.0,因為它是 macOS Mojave 上附帶的版本)
- 解壓/tar/gz 然後
/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; }
並將其註釋掉。對於 2.6.0 版本,這是在第 155-159 行。通過刪除這些行,您將刪除最大 CN 長度檢查。 4. 按照
README
文件中的說明建構二進製文件。我在 macOS 上建構時不需要安裝任何庫,但在 YMMV 上。我使用cmake
了將新的 openssl 二進製文件放入/build/apps/openssl
5. 使用命令行標誌生成 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
之後,您應該準備好可以使用的出色的不合規證書。我注意到在使用 CN 超過 64 個字元的證書時存在很多問題(Wireshark 會在分離器顯示中截斷 CN 等),但它確實可以滿足我的需要。