[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.pem
và 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?
OpenSSL 0.9.8zh 14 Jan 2016
không phải cái đó cũ...
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.