CSR: Bad UTF-8 parsing from PEM even when using `forge.asn1.Type.UTF8`
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 45/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Đình trệ
- Công nghệ
- javascript
- Lĩnh vực
- cryptography
Hướng nghiên cứu
Start at forge.pki.certificationRequestFromPem and trace how the CSR subject value is decoded after ASN.1 parsing, comparing it with forge.util.decodeUtf8 and the UTF8 valueTagClass path. Reproduce the supplied Sišek round trip and verify that certificationRequestFromPem returns the original string while prettyPrint remains correct.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
When creating a CSR with forge 1.3.1 that has a CN with special characters (Sišek), parsing it from PEM messes up the String (SiÅ¡ek) even when valueTagClass: forge.asn1.Type.UTF8 is set.
Sišek expressed as bytes is [83, 105, 197, 161, 101, 107], the problem here is, that each byte is individually interpreted as a UTF-8 codepoint instead of correctly interpreting [197, 161] as a single codepoint.
Converting from Uint8Array to String correctly can be done with new TextDecoder("utf-8").decode(new Uint8Array([83, 105, 197, 161, 101, 107])).
Reading the generated PEM file with OpenSSL produces the correct result.
var keypair = await forge.pki.rsa.generateKeyPair({ bits: 512 });
var csr = forge.pki.createCertificationRequest();
csr.setSubject([{ name: "emailAddress", value: "[email protected]", valueTagClass: forge.asn1.Type.UTF8 }, { name: "commonName", value: "Sišek", valueTagClass: forge.asn1.Type.UTF8 }]);
csr.setAttributes([{ name: "extensionRequest", extensions: [{ name: "subjectAltName", altNames: [{ type: 1, value: "[email protected]" }] }] }]);
csr.publicKey = keypair.publicKey;
csr.sign(keypair.privateKey, forge.md.sha256.create());
console.log(csr.subject.attributes.find((attr) => attr.name == "commonName").value);
// outputs Sišek, as expected
var pem = forge.pki.certificationRequestToPem(csr);
var csrFromPem = forge.pki.certificationRequestFromPem(pem);
console.log(csrFromPem.subject.attributes.find((attr) => attr.name == "commonName").value);
// outputs SiÅ¡ek instead of the expected Sišek
Funnily enough, when using forge.asn1.prettyPrint(forge.pki.certificationRequestToAsn1(csrFromPem)), the String value is displayed correctly (this is also true if the argument is csr). This is achieved by running the value through forge.util.decodeUtf8(value) before displaying it.
- Ngôn ngữ chính
- JavaScript
- Star
- 5.4k
- Fork
- 875
- Merge trung bình
- 3 phút
- Pull request đã merge (30 ngày)
- 6
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của digitalbazaar/forge
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
digitalbazaar/forge#1170 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 52/100
digitalbazaar/forge#1147 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 45/100
digitalbazaar/forge#1146 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 58/100
digitalbazaar/forge#1145 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 48/100
digitalbazaar/forge#1144 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của digitalbazaar/forge
Issue tương tự
-
🧩 Docs job fails type-checking `generate-plugin-docs.ts`Có thể đã có người làm @X-Guardian đã nhận hôm nay. Đang mởdiscussion
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100
msys2/setup-msys2#673 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
inveniosoftware/invenio-app-rdm#3630 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
githubnext/gh-aw-workshop#5522 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
Dayset/ps2-elite-kd#119 ·