Openssl

在 android 中創建 CSR

  • October 4, 2019

我正在嘗試在 android 中使用 spongyCastle 生成一個 csr,該 csr 必須送出給 web 服務。我的問題是網路服務總是抱怨 CSR 不是 DER 或 PEM 格式。另一方面,如果我使用 Openssl 命令行來生成它,webservice 接受它,所以我知道 webservice 工作以及送出它的程式碼。那麼,請一些大師發現我通過程式碼生成的 CSR 和 OpenSSL 命令行生成的 CSR 之間的區別,appart 來自公鑰?

由 android 中的 spongyCastle 程式碼創建

—–開始證書REQUEST—– MIICtTCCAZ8CAQAwcjELMAkGA1UEBhMCSVQxGDAWBgNVBAMMDzM1MjgxNDA5MjAw NTc3NDEQMA4GA1UEBwwHQ0FUQU5JQTETMBEGA1UECgwKU0lTT0ZUIHNybDEOMAwG A1UECAwFSVRBTFkxEjAQBgNVBAsMCU1hcmtldGluZzCCASIwDQYJKoZIhvcNAQEB BQADggEPADCCAQoCggEBAL9zyTyT198QtXPaHvYXfT11MjQo+W9EeU5dBMotqdzl 0OY6Bm4iNAk8PRCvVAMwnGX+ztb2cHHaXPAtoYdxiLIHO26dup1x7w/2RX12CKWV kvE1pjXsgUFL/lxjco6LNi8NPk0Mne5aJv14sQ/evyr6DbINsWKVjWFew//EvBqk r0jXu4PfIrZZXUxMiioqnSvAuec+EI52ifgx3stMVhUHSFroqbkOCmc2EKH1eX+k UtYvdNtz6kkfoXtDRBfm0pg0qZOGBXqc0FhiFkD52ChDaMCz9WvMPhZbDKpmLIrc ORGhl8A7y3BCL5dhmQVa3BgPZJymqryYs8qQbz+x6EUCAwEAAaAAMAsGCSqGSIb3 DQEBCwOCAQEAi4/5RGZI9VSJcc43bA0pEsKMlQpQv8a51I/PvhEyfL8iKvMg4poA HuOzcuvin0eaShjXtCVma7NCUg6+Ccl7iZnVJpK1vtJEp8U6lpRt1VyzzpZJXex1 uJTXuWY1u52E1lj4M81x7hqUKml61/Ahy02G3szTn6JfIK3jH76/xeUui9NWqkZE 6meb7AemimgmF9kfuhuEAhSt/+ l6Pas1F6YcM54NexPNdGZ+x6l06WiVoh2TlenE aHABmk32U4BMnAYWsdq1MxpvnEriyf9Z8sYM2Zyf0C9O8Bzz9qnS8ZGMsODbTSas lEdA+M8UmQ646BB0LO4Vr7RETRX/fEl49w== —–結束證書請求—–

和由 OpenSSL 命令行創建的

—–開始證書REQUEST—– MIICtTCCAZ0CAQAwcDELMAkGA1UEBhMCSVQxDjAMBgNVBAgMBUlUQUxZMREwDwYDVQQHDAhDQVRBTElOQTETMBEGA1UECgwKSW5mb3JwaXJlczERMA8GA1UECwwIc29mdHdhcmUxFjAUBgNVBAMMDTEyMzQ1Njc4OTAxMjMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDJuj7e1NRGocLmAmvc95UAAGcEevG8HreSr6V2U16OTyHwIm2THZ5He6BgJwKskFLUdW1/DfLd/52b0nDymjgNRIIlJeYdEty96WRKUuacVnYegEwtyL1fTeFkajTflw0EIy/2ehNXwoDpB5mWzzWt97Cque27umP3W7a3cCz2c9f7XCx5Uq7qHFPUaaH9ys/oRpJCgw5Lfv9duV99KO4yXCfrvfmsN1y9LYKkD4MW1BUQSLvST5BDRnRAGRNFe7V3KzvnRYjH8nhv5Evm+j8n1mzrGK7DdQU6N48yKF0BPPFzhFR2ACxGUjMysHQgobPy0UToBBAxrE7qiS+oaiXLAgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAEQZwWzCfUaCgeccDZ47QxBv601E63qwMhFc6bteU6jKPytY7BkojvxYZwkvGJnUqg2PTxAr6YnQHY/agWZAqLE358s32f4j81Ky+aG1pmMZf5Yx+tKoDsJtxzzubdj9gukUkq/tjQRXgGVx53lM26POfsgC5/pYnECqHO​​KuMxTUHUrOfX0J8bSRu5BoZfr9fEsy/ha/ymmmx9jBDx8wLo7vD78MnzdXDVMONVY7KgnujnEN9xl5EdJGAfQCm+Sf0Fx9z/RUSaUYV/9s/xj4NPhqgj51EKuwg+/7oOpM3Y/x5aT+cqxHUV0J1UEi9T4kRocchi3Rn9Xn5scMN6S7A9w== —–結束證書申請—–

TIA

尼爾森

編輯:我要感謝所有回复的人。無論如何,我犯了兩個錯誤。問題應該更像是為什麼第一個 CSR 不被接受,第二個是。

第二個錯誤是它畢竟是沒有問題的。當使用手動生成的 CSR 時,建構缺少一個字節的 xml 的程式碼中只是一個愚蠢的錯誤。調試 900 多個字元的字元串很痛苦。

再次感謝大家。

假設您正確發布,您的第二個文件將聲明的 PEM 格式的 base64 主體作為單行,而不是根據需要分解/折疊成 64 個字元(最大)的行。請參閱RFC 7468 第 2 節接近尾聲。一些軟體對此很鬆懈(包括,有用的,openssl asn1parse!)但不是全部。我想知道你是否切換了這些,因為 OpenSSL 命令行(和庫)總是根據需要編寫帶有換行符的 PEM——儘管 IME 它可能會在 Windows 上編寫 Unix 樣式的換行符(僅限 LF),如果你在某些Windows中打開這樣的文件像記事本這樣的程序它可能會忽略/丟棄LF並將其視為一個巨大的行,而例如寫字板(或typemore) 正確顯示。

所以首先,我們需要對這兩個ASN.1編碼的 CSR 進行解碼。

如您所見,它們的公鑰值、地區名稱(= 城鎮)、組織單位名稱(行銷與軟體)、組織名稱(Inforpires 與 SISOFT srl)以及最後的簽名不同。

然而,最重要的問題是它們對不同的屬性有不同的排序,據我了解,這違反了解釋錯誤的 DER 規則。

引用自:https://crypto.stackexchange.com/questions/74802