Tại sao openssl pkcs12 xuất thêm chứng chỉ neo gốc, sao chép chứng chỉ máy chủ trên Mac OS X


1

[Ban đầu đăng trên Slack Overflow , nhưng chủ đề bình luận phàn nàn về địa điểm không phù hợp.]

Chúng tôi đang nỗ lực chuyển đổi từ Chứng chỉ SSL StartCom sang Mã hóa và cố gắng thiết lập nó để tự động hoạt động với macOS Server + Apache HTTPD. Từ công cụ dòng lệnh ( security import ), Máy chủ macOS không chấp nhận đường thẳng .pem tập tin mà bạn phải cung cấp cho nó .p12 tập tin, từ đó nó trích xuất .pem các tệp để cấu hình trong Apache. Khó chịu và vô nghĩa, nhưng đó là những gì chúng ta phải sống với bây giờ.

Để tạo ra điều này .p12 tập tin, chúng tôi phải thực hiện lệnh này:

openssl pkcs12 -export \
-inkey /etc/letsencrypt/live/example.com/privkey.pem \
-in /etc/letsencrypt/live/example.com/cert.pem \
-certfile /etc/letsencrypt/live/example.com/chain.pem \
-out /etc/letsencrypt/live/example.com/example.com.p12

Và đây là nơi mà nó trở nên kỳ lạ. Đầu ra example.com.p12 tập tin có example.com chứng chỉ hai lần , theo sau là chứng chỉ CA trung gian Encrypt, tiếp theo là chứng chỉ neo DST Root CA X3 tự ký không cần thiết (mà tất cả các trình duyệt đã cài đặt trong chúng theo mặc định) và cuối cùng là khóa riêng. Kết quả là bắt tay SSL Apache bao gồm chứng chỉ máy chủ hai lần và chứng chỉ CA trung gian và chứng chỉ gốc (không nên gửi), dẫn đến cảnh báo trên trình kiểm tra Qualys SSL Labs.

Chúng tôi nhìn vào trong cert.pemvà nó chỉ chứa chứng chỉ máy chủ (và chỉ một lần). chain.pem chỉ chứa chứng chỉ CA trung gian (không phải neo gốc hoặc chứng chỉ máy chủ). privkey.pem chỉ chứa khóa riêng. Vì thế openssl pkcs12 -export đang sao chép chứng chỉ máy chủ và sau đó chuyển sang bước bổ sung tìm kiếm chứng chỉ neo gốc và thêm nó.

Nếu chúng ta chạy cùng lệnh này trên openSUSE Linux, thì đầu ra .p12 tệp chỉ có chứng chỉ máy chủ (một lần), chứng chỉ CA trung gian và khóa riêng. Không có neo gốc.

Chúng tôi đã thử các biến thể sau đây và thấy không có sự khác biệt trong đầu ra:

openssl pkcs12 -export \
-inkey /etc/letsencrypt/live/example.com/privkey.pem \
-in /etc/letsencrypt/live/example.com/fullchain.pem \
-out /etc/letsencrypt/live/example.com/example.com.p12

openssl pkcs12 -export \
-inkey /etc/letsencrypt/live/example.com/privkey.pem \
-certfile /etc/letsencrypt/live/example.com/fullchain.pem \
-out /etc/letsencrypt/live/example.com/example.com.p12

Cách duy nhất tôi có thể nhân đôi hành vi chứng chỉ máy chủ nhân đôi không chính xác trên máy Linux là thực hiện các thao tác sau (nhưng nó vẫn không bao gồm neo gốc):

openssl pkcs12 -export \
-inkey /etc/letsencrypt/live/example.com/privkey.pem \
-in /etc/letsencrypt/live/example.com/cert.pem \
-certfile /etc/letsencrypt/live/example.com/fullchain.pem \
-out /etc/letsencrypt/live/example.com/example.com.p12

(Lưu ý việc sử dụng fullchain.pem thay vì chain.pem kết hợp với việc sử dụng cert.pem ... có ý nghĩa hoàn hảo tại sao chứng chỉ máy chủ sẽ bị trùng lặp, nhưng đó không phải là lệnh chúng tôi đang sử dụng trên Mac OS X.)

Bất cứ ý tưởng làm thế nào để có được openssl pkcs12 -export để làm điều đúng đắn ở đây?


Bạn đã thử cài đặt và chạy phiên bản hiện đại của OpenSSL (có thể thông qua MacPorts hoặc Homebrew) chưa? Apple có thư viện bảo mật của riêng họ và đã không cho thấy OpenSSL của họ bất kỳ tình yêu nào trong một thời gian dài.
Spiff

Chúng tôi chưa thử điều đó. Tôi đã cảnh giác về việc nâng cấp OpenSSL trong một cấu hình hoạt động khác đã vượt qua kiểm tra bảo mật. Tuy nhiên, OpenSSL 0.9.8zh 14 Jan 2016 không phải cái đó cũ...
Nick Williams

Ngay tại High Sierra, Apple đã chuyển thư viện SSL từ OpenSSL 0.9.8zh sang LibreSSL 2.2.7. LibreSSL là một nhánh của OpenSSL được OpenBSD hỗ trợ. Truyền tải an toàn là API riêng của Apple cho SSL / TLS nhưng nó chủ yếu được sử dụng cho phần mềm bên thứ nhất của họ. LibreSSL sẽ đóng vai trò là thư viện SSL cho phần mềm của bên thứ ba. Điều này không được bao gồm trong bất kỳ phiên WWDC nào nhưng đã được quan sát bởi người dùng beta High Sierra. thesslstore.com/blog/crypto-ssl-improvements-high-sierra-ios-11 )
Nick Williams

openssl version sản lượng OpenSSL 0.9.8zh 14 Jan 2016 trên máy tính cục bộ của tôi chạy Sierra, nhưng nó thực sự mang lại LibreSSL 2.2.7 trên máy chủ mà tập lệnh chứng chỉ này đang chạy (High Sierra). Vì vậy, có lẽ đây là một lỗi trong LibreSSL? Tôi nên cập nhật tiêu đề và thẻ, nhưng trước tiên tôi sẽ kiểm tra nó vào cả tối nay để xem hành vi có khác không.
Nick Williams
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.