Bộ chuyển đổi khóa JWK ⇄ PEM
Chuyển đổi khóa mật mã giữa định dạng JWK và PEM bằng API Web Crypto thực, giải mã thuật toán/đường cong/kích thước và tính toán dấu vân tay RFC 7638 JWK.
kết quả
Khóa Web JSON (JWK) và khóa được mã hóa PEM hiển thị có thể thay thế cho nhau trên các thư viện JWT, công cụ TLS và cấu hình OAuth/OIDC, nhưng việc chuyển đổi giữa hai loại này bằng tay có nghĩa là cấu trúc DER giải mã base64 hoặc định dạng lại JSON - rất dễ mắc sai lầm. Công cụ này thực hiện chuyển đổi bằng API Web Crypto thực của trình duyệt thay vì thao tác văn bản: khối PEM đã dán được nhập bằng crypto.subtle.importKey('spki'|'pkcs8', ...) và được xuất lại dưới dạng JWK vớiexportKey('jwk', ...); JWK đã dán được nhập bằng importKey('jwk', ...) và được xuất lại dưới dạng SPKI hoặc PKCS8 DER, sau đó được gói trong tiêu đề PEM chính xác. Vì trình duyệt tự xác thực và giải mã nội dung khóa nên khóa không đúng định dạng hoặc lựa chọn thuật toán không khớp sẽ gây ra lỗi lớn thay vì âm thầm tạo ra rác.
Các thuật toán được hỗ trợ là RSA (RSASSA-PKCS1-v1_5), EC trên đường cong P-256/P-384/P-521 và — nơi trình duyệt triển khai chúng — Ed25519 và X25519. Hỗ trợ trình duyệt dành cho Ed25519/X25519 trong Web Crypto vẫn không nhất quán giữa các công cụ, do đó, thay vì đoán từ chuỗi tác nhân người dùng, công cụ này chạy một thăm dò crypto.subtle.generateKey() thực tế cho đường cong đã chọn và cho bạn biết rõ ràng liệu nó có được hỗ trợ ở đây hay không, thay vì trả về một kết quả bịa đặt.
Mọi chuyển đổi cũng giải mã siêu dữ liệu thực của khóa: đối với khóa RSA, độ dài bit mô đun và thuật toán băm ngay từ đối tượng CryptoKey; đối với khóa EC và OKP, đường cong được đặt tên; và đối với mọi khóa, dấu vân tay RFC 7638 JWK — hàm băm SHA-256 của các thành viên bắt buộc của JWK được sắp xếp theo thứ tự từ điển nghiêm ngặt (e/kty/n cho RSA, crv/kty/x/y cho EC, crv/kty/x cho OKP/Ed25519/X25519). Dấu vân tay này là thứ mà nhiều hệ thống sử dụng làm mã định danh "đứa trẻ" của khóa và việc đặt sai thứ tự thành viên sẽ tạo ra một hàm băm hoàn toàn khác, đây chính xác là loại lỗi mà việc triển khai thủ công dễ mắc phải.
Vì mọi thứ đều chạy qua crypto.subtle trong tab trình duyệt của riêng bạn nên tài liệu khóa riêng tư không bao giờ rời khỏi thiết bị của bạn — không có máy chủ, không tải lên và không có lệnh gọi API bên ngoài nào liên quan tại bất kỳ thời điểm nào trong quá trình chuyển đổi.