Kể từ Chrome 52, WebRTC sử dụng một thuật toán hiệu quả và an toàn hơn nhiều để tạo chứng chỉ (RTCCertificate): ECDSA. Ngoài ra, giờ đây, bạn có thể lưu trữ RTCCertificates bằng IndexedDB.
RTCCertificates là các chứng chỉ tự ký được dùng trong quy trình bắt tay DTLS khi thiết lập kết nối ngang hàng WebRTC. (DTLS là cách triển khai giao thức mật mã TLS cho các giao thức datagram như UDP mà WebRTC sử dụng.)
Cho đến gần đây, WebRTC sử dụng khoá RSA-1024 cho chứng chỉ. Các khoá này có một số nhược điểm:
- Việc tạo khoá RSA-1024 có thể làm tăng thời gian thiết lập lệnh gọi thêm khoảng 1000 mili giây.
- Khoá RSA 1024 bit không cung cấp độ mạnh mã hoá đầy đủ.
Do quá trình tạo chứng chỉ bằng RSA-1024 diễn ra chậm, nên một số ứng dụng di động đã chuyển sang chuẩn bị trước hoặc sử dụng lại chứng chỉ.
Bạn có thể giải quyết vấn đề về độ mạnh của khoá bằng cách chuyển sang khoá RSA 2048 bit trở lên, nhưng điều đó sẽ làm chậm quá trình thiết lập lệnh gọi thêm vài giây. Thay vì thay đổi kích thước khoá RSA, Chrome 52 triển khai khoá ECDSA (Thuật toán chữ ký số đường cong elip) để sử dụng trong chứng chỉ. Các khoá này mạnh ngang với khoá RSA 3072 bit, nhưng nhanh hơn hàng nghìn lần: hao tổn khi thiết lập lệnh gọi bằng ECDSA chỉ là vài mili giây.
Tóm lại, khoá ECDSA mang lại khả năng bảo mật, quyền riêng tư và hiệu suất tốt hơn, đặc biệt là trên thiết bị di động. Vì những lý do này, ECDSA đã được yêu cầu trong bản dự thảo Cấu trúc bảo mật WebRTC.
Kể từ Chrome 47, bạn có thể chọn sử dụng ECDSA:
// or webkitRTCPeerConnection
RTCPeerConnection.generateCertificate({
name: "ECDSA",
namedCurve: "P-256"
}).then(function(certificate) {
var pc = new RTCPeerConnection({..., certificates: [certificate]});
});
Kể từ Chrome 52, mặc dù ECDSA được bật theo mặc định, nhưng bạn vẫn có thể chọn tạo chứng chỉ RSA:
pc.generateCertificate({
name: "RSASSA-PKCS1-v1_5",
modulusLength: 2048,
publicExponent: new Uint8Array([1, 0, 1]),
hash: "SHA-256"
})
(Xem bản nháp W3C để biết thêm thông tin về generateCertificate()
.)
Lưu trữ RTCCertificate trong IndexedDB
Một điểm cải tiến khác trong Chrome 52: RTCCertificates mà WebRTC sử dụng có thể được lưu và tải từ bộ nhớ IndexedDB, nhờ đó không cần tạo chứng chỉ mới giữa các phiên. Điều này có thể hữu ích, ví dụ: nếu bạn vẫn cần sử dụng RSA và muốn tránh hao tổn khi tạo RSA. Với ECDSA, bạn không cần lưu vào bộ nhớ đệm vì phương thức này đủ nhanh để tạo chứng chỉ mới mỗi khi cần.
Bộ nhớ IndexedDB RTCCertificate đã được phát hành trong Firefox và Opera 39.