P12 cũ thất bại trên OpenSSL 3: sai mật khẩu hay mật mã cũ?
Phân biệt cụm mật khẩu gõ sai với gói RC2 cũ mà OpenSSL 3 từ chối mở, rồi niêm phong lại tệp mà không gỡ bỏ lớp bảo vệ khóa.
Hộp thoại nhập nhận mật khẩu của bạn, quay một lát rồi báo rằng nó không đọc được gói. Không có gì trong thông báo đó cho biết bạn gõ sai cụm mật khẩu hay tệp được niêm phong bằng mật mã mà ứng dụng không còn cung cấp. Đây là hai kiểu hỏng khác nhau với cách sửa khác nhau, và chọn sai dẫn tới việc hạ cấp ứng dụng, chỉ trì hoãn quyết định. Quan sát giai đoạn ứng dụng dừng lại sẽ phân biệt hai trường hợp trong khoảng một phút.
Điều gì xảy ra giữa hộp thoại và danh sách chứng chỉ
Tệp .p12 là một vùng chứa, không phải chứng chỉ. Bên trong có một hoặc nhiều túi chứng chỉ và một túi khóa riêng được mã hóa bằng khóa dẫn xuất từ mật khẩu của bạn, cùng một bước kiểm tra toàn vẹn gọi là MAC trên toàn bộ tệp. Mở nó nghĩa là xác minh MAC đó, giải mã túi khóa và khớp chứng chỉ với khóa lấy ra.
Vấn đề mật khẩu xuất hiện ở bước MAC. Vấn đề mật mã xuất hiện muộn hơn, khi phải mở túi khóa và bản dựng thực hiện việc đó không có cài đặt cho thuật toán được nêu trong tệp.
Trường hợp thứ hai phổ biến trên các hệ thống hiện nay vì OpenSSL 3 đã chuyển một nhóm thuật toán cũ sang legacy provider tùy chọn. Các gói do OpenSSL 1.x xuất thường niêm phong chứng chỉ bằng RC2 40 bit và khóa riêng bằng Triple DES ba khóa. Bản dựng OpenSSL 3 mặc định vẫn xác minh MAC bằng mật khẩu đúng của bạn rồi hỏng ở túi khóa, nên mật khẩu chưa bao giờ sai và gõ lại không thay đổi gì.
Đọc vùng chứa mà không xuất khóa ra
Hãy yêu cầu bản dựng OpenSSL trên máy bạn phân tích tệp và đọc điểm mà nó bỏ cuộc. Kiểm tra không có tệp đầu ra để khóa vẫn được mã hóa trên đĩa, và đó là lý do duy nhất bước này an toàn trên máy chủ dùng chung.
openssl pkcs12 -in vpn-identity.p12 -info -nooutVới gói cũ và mật khẩu đúng, lệnh này in các thuộc tính của túi rồi dừng với digital envelope routines::unsupported. Với mật khẩu sai, bạn nhận được Mac verify error: invalid password? trước khi bất kỳ túi nào được đọc. Hai thông báo chỉ về hai hướng ngược nhau, và đó chính là thông tin mà ứng dụng đã giấu.
Nếu lỗi thuộc về thuật toán không được hỗ trợ, hãy chạy lại đúng lệnh đó với -legacy được thêm vào và không đổi gì khác. Cờ đó chỉ nạp legacy provider cho đúng tiến trình ấy. Nó không buộc ứng dụng VPN phân tích các gói cũ, không đụng tới chính sách mã hóa toàn hệ thống, và đây là phép đo chứ không phải sửa chữa, vì tệp vẫn phải được thay.
Lỗi nào ứng với giai đoạn nào
Một bảng ngắn giữ ba kết cục tách nhau, và cách diễn đạt quan trọng hơn nơi hộp thoại xuất hiện.
| Text you see | Stage | What it tells you |
|---|---|---|
Mac verify error: invalid password? | Integrity check | Passphrase or cached credential, not the cipher |
digital envelope routines::unsupported | Bag decrypt | Algorithm missing from the default provider |
not enough data / header too long | Container format | Wrong encoding, edited file, or truncated download |
Văn bản như not enough data hay header too long không thuộc nhóm nào trong hai nhóm đầu. Đó là vấn đề định dạng: tệp DER bị đổi tên thành .pem, bản sao bị trình soạn thảo ghi lại kết thúc dòng làm hỏng, hoặc bản tải xuống chưa đầy đủ. Hãy so tổng kiểm tra với tổng mà nhà phát hành đã gửi trước khi bắt đầu xem mật mã.
Chỉ coi Mac verify error là bằng chứng về mật khẩu. Nó nghĩa là MAC tính từ những gì bạn gõ không khớp với giá trị đã lưu, điều xảy ra khi gõ nhầm, khi mật khẩu được lưu đệm từ lần nhập trước, hoặc khi tệp được xuất lại dưới cụm mật khẩu khác. Nó không nói gì về việc các thuật toán bên trong có cũ hay không.
Tạo gói mà ứng dụng thực sự mở được
Khi trình phân tích legacy xác nhận tệp lành, cách sửa lâu dài là bản thay thế có thuật toán mà ứng dụng đích hỗ trợ: AES-256-CBC cho túi khóa và túi chứng chỉ, PBKDF2 với SHA-256 cho việc dẫn xuất và SHA-256 cho MAC. Quản trị viên PKI của bạn có thể xuất bản đó từ cùng chất liệu khóa, và chứng chỉ bên trong vẫn là chứng chỉ mà máy chủ của bạn đã tin.
Khi phải chuyển đổi cục bộ, hãy yêu cầu công cụ pkcs12 niêm phong lại các túi thay vì đổ chúng ra trước. Giữ cả hai cụm mật khẩu ngoài lịch sử shell bằng cách đọc chúng từ tệp.
openssl pkcs12 -in vpn-identity.p12 -out vpn-identity-aes.p12 \
-keypbe AES-256-CBC -certpbe AES-256-CBC -macalg sha256 \
-passin file:old.pass -passout file:new.passMột lần chuyển đổi thành công không nói gì về hạn dùng, mục đích khóa, sự khớp của khóa riêng hay việc máy chủ có tin chuỗi phát hành hay không. Đóng gói lại là thay đổi vận chuyển, không phải gia hạn, và mỗi điểm đó vẫn cần kiểm tra riêng.
Bỏ qua mọi công thức ghi ra khóa trung gian không được bảo vệ hoặc mật khẩu đầu ra rỗng chỉ vì ứng dụng sau đó chấp nhận tệp. Một gói đọc được nhưng bị gỡ lớp bảo vệ là kết quả tệ hơn lỗi nhập mà bạn bắt đầu.
Xác nhận ứng dụng đã nhập tệp bạn tạo
Phân tích sạch trong terminal chứng minh vùng chứa hợp lệ. Nó không chứng minh ứng dụng đã chọn nó, vì một hồ sơ còn sót có thể tiếp tục trỏ tới tệp cũ, và một số ứng dụng lưu đệm danh tính đã nhập dưới tên bạn không chọn.
In danh tính bạn sắp nhập và so với điều ứng dụng hiển thị trong khung xem chứng chỉ.
openssl pkcs12 -in vpn-identity-aes.p12 -clcerts -nokeys -passin file:new.pass \
| openssl x509 -noout -subject -dates -fingerprint -sha256Xóa mục hồ sơ cũ trước, rồi mới nhập. Nếu ứng dụng ghi lại chủ thể hoặc dấu vân tay đã nạp, hãy đối chiếu với dòng phía trên; nếu nó chỉ hiện tên thân thiện, hãy kiểm tra ngày hết hạn thay thế, vì khó nhầm với chứng chỉ khác cùng nhà phát hành hơn.
Tài liệu tham chiếu PKCS12 liệt kê provider, cụm mật khẩu và các tùy chọn đầu ra dùng ở đây. Giữ legacy provider ngoài môi trường ứng dụng chính là điểm mấu chốt: đo với nó, phát hành không có nó, và để khóa riêng được bảo vệ trên đĩa.