Hãy thử openssl s_client và cho phép bạn hiển thị các chứng chỉ. Lệnh là:
$ openssl s_client -kết nối co2avatar.org:443 -tên máy chủ co2avatar.org -showcerts
Bạn sẽ thấy rằng máy chủ của bạn trả về chứng chỉ cho CN = gitlab.sustainable-data-platform.org
và một tên thay thế chủ đề bao gồm tên miền của bạn DNS:co2-avatar.com
. Vì vậy, bản thân chứng chỉ là tốt.
Nếu bạn muốn kết hợp mọi thứ vào một chuỗi lệnh để xem nội dung chứng chỉ của mình:
tiếng vang | openssl s_client -connect co2avatar.org:443 -servername co2avatar.org -showcerts 2>/dev/null |sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | openssl x509 -noout -text
Điều còn thiếu là chứng chỉ trung cấp. Điều này cũng sẽ được gửi bởi máy chủ, nhưng lệnh đầu tiên cho bạn thấy rằng nó không có ở đó - chỉ có chứng chỉ được gửi bởi máy chủ của bạn.
Vì vậy, lỗi openssl là chính xác, vì thực sự chứng chỉ trung gian bị thiếu.
Vì vậy, để giải quyết nó, bạn cần điều chỉnh cấu hình apache của mình. Đây là cách cấu hình của bạn có thể trông giống như:
Tên tệp phải giống với /etc/apache2/sites-enabled/co2-avatar.com-le-ssl.conf
<IfModule mod_ssl.c>
SSLStaplingCache shmcb:/var/run/apache2/stapling_cache(128000)
<VirtualHost *:443>
ServerName co2-avatar.com
ServerAlias www.co2-avatar.com
#...
#... insert your other stuff here...
#...
SSLCertificateFile /etc/letsencrypt/live/co2-avatar.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/co2-avatar.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLUseStapling on
</VirtualHost>
</IfModule>
Dựa trên mô tả của bạn, tôi đoán tốt nhất là dòng sau sai trong cấu hình của bạn:
SSLCertificateFile /etc/letsencrypt/live/co2-avatar.com/cert.pem
. Nó nên được thay thế bằng SSLCertificateFile /etc/letsencrypt/live/co2-avatar.com/fullchain.pem
, để gửi cả (các) sản phẩm trung gian.
CẬP NHẬT giải pháp (sau khi thảo luận)
Trong cuộc thảo luận, hóa ra phiên bản openssl và Apache được sử dụng trên máy chủ CentOS này chỉ là phiên bản cũ hơn, vì vậy một số tính năng không được hỗ trợ. (Apache 2.4.6, OpenSSL 1.0.2k, cấu hình trung gian, không HSTS, không OCSP)
Dựa theo Trình tạo cấu hình SSL Mozilla cấu hình chung sau đây có thể được sử dụng trong trường hợp này:
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /path/to/signed_certificate
SSLCertificateChainFile /path/to/intermediate_certificate
SSLCertificateKeyFile /path/to/private_key
</VirtualHost>
Được dịch sang trường hợp cụ thể này, một cấu hình hoạt động kết quả sẽ như sau:
<VirtualHost *:443>
ServerName sustainable-data-platform.org
ServerAlias co2-avatar.com
ServerAlias ... <include all other SAN names here>
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/co2-avatar.com/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/co2-avatar.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/co2-avatar.com/privkey.pem
</VirtualHost>
Như lưu ý cho các cài đặt cũ như vậy
Chữ ký chéo Letâs Encrypt R3 và DST Root CA X3, chứng chỉ trung gian và gốc sẽ hết hạn lần lượt vào ngày 29 tháng 9 năm 2021 và ngày 30 tháng 9 năm 2021. Vì vậy, kể từ ngày 4 tháng 5 năm 2021, các chứng chỉ mới phát hành sử dụng chuỗi dài hơn với ISRG Root X1 được ký chéo làm chứng chỉ trung gian.
Thật không may, do cách tạo và xác minh đường dẫn chứng chỉ, không phải tất cả các triển khai TLS đều có thể xác minh thành công dấu chéo. Đây là trường hợp của OpenSSL 1.0.2. Do đó, các chương trình chạy trên RHEL/CentOS 7 sử dụng OpenSSL có thể sẽ không xác minh được chuỗi chứng chỉ mới hoặc thiết lập kết nối TLS. Việc nâng cấp lên các phiên bản Openssl mới hơn trên các nền tảng như vậy không đơn giản.
Có một số tùy chọn: cập nhật cửa hàng ủy thác (xóa chứng chỉ gốc DST Root CA X3 - sau khi loại bỏ chứng chỉ này, tác động sẽ ở mức tối thiểu) ở phía máy khách (hoặc) thay đổi chuỗi chứng chỉ ở phía máy chủ.
Đối với Nginx
Đối với Nginx, chỉ có một tham số để chỉ định tệp chứng chỉ. Bạn nên sử dụng fullchain.pem
được cung cấp bởi certbot để làm cho nó hoạt động chính xác.
Cấu hình phù hợp trong khối máy chủ cho máy chủ ảo nhất định sẽ như sau:
người phục vụ {
...
ssl_certificate /etc/letsencrypt/live/co2-avatar.com/fullchain.pem; -> thay thế cert.pem cho fullchain.pem
ssl_certificate_key /etc/letsencrypt/live/co2-avatar.com/privkey.pem;
}
Người giới thiệu