Điểm:2

Làm cách nào để sửa chuỗi chứng chỉ bằng letsencrypt/certbot?

lá cờ cn

Tôi không thể xoay quanh vấn đề sau đây. Xác minh chứng chỉ của máy chủ với openssl không thành công, chuỗi không hoàn chỉnh.

Tuyên bố miễn trừ trách nhiệm: Tôi không phải là quản trị viên và chưa làm việc nhiều với các chứng chỉ.

Xác minh bằng OpenSSL

$ openssl xác minh -CAfile /etc/letsencrypt/live/co2-avatar.com/fullchain.pem /etc/letsencrypt/live/co2-avatar.com/cert.pem

# /etc/letsencrypt/live/co2-avatar.com/cert.pem: C = US, O = Nhóm nghiên cứu bảo mật Internet, CN = ISRG Root X1
# lỗi 2 khi tra cứu độ sâu 2: không thể lấy chứng chỉ nhà phát hành

Kiểm tra một trong các miền trong chứng chỉ

openssl s_client -kết nối co2avatar.org:443 -tên máy chủ co2avatar.org
# ĐÃ KẾT NỐI(00000003)
# depth=0 CN = gitlab.sustainable-data-platform.org
# xác minh lỗi:num=20:không thể lấy chứng chỉ của tổ chức phát hành địa phương
# xác minh trả lại:1
# depth=0 CN = gitlab.sustainable-data-platform.org
# xác minh lỗi:num=21:không thể xác minh chứng chỉ đầu tiên
# xác minh trả lại:1
# ---
# Chuỗi chứng chỉ
# 0 s:CN = gitlab.sustainable-data-platform.org
# i:C = US, O = Let's Encrypt, CN = R3
# ---
# Chứng chỉ máy chủ
# ----- GIẤY CHỨNG NHẬN BẮT ĐẦU -----

Hoặc chạy

cuộn tròn -v https://co2avatar.org
# * Đang thử 85.214.38.88:443...
# * Đã đặt TCP_NODELAY
# * Đã kết nối với co2avatar.org (85.214.38.88) cổng 443 (#0)
# * ALPN, cung cấp h2
# * ALPN, cung cấp http/1.1
# * đặt thành công vị trí xác minh chứng chỉ:
# * Tệp CA: /etc/ssl/certs/ca-certificates.crt
# CApath: /etc/ssl/certs
# * TLSv1.3 (OUT), bắt tay TLS, Client hello (1):
# * TLSv1.3 (IN), TLS handshake, Server hello (2):
# * TLSv1.2 (IN), bắt tay TLS, Chứng chỉ (11):
# * TLSv1.2 (OUT), cảnh báo TLS, CA không xác định (560):
# * Sự cố chứng chỉ SSL: không thể lấy chứng chỉ của nhà phát hành địa phương
# * Đóng kết nối 0
# curl: (60) Sự cố chứng chỉ SSL: không thể lấy chứng chỉ của nhà phát hành địa phương

Có thể có cả hai, cấu hình sai trong Apache Vhost của tôi cho miền cũng như sự cố trong chính chuỗi chứng chỉ. Làm cách nào tôi có thể kiểm tra cái cuối cùng (Tôi đã googled rất nhiều, nhưng hầu hết các lần truy cập là về xác minh openssl với -CAtệp hoặc về tổ chức phát hành chứng chỉ khác)?

Tôi có cần phải kiểm tra gói chứng chỉ gốc và chính xác như thế nào?

Có một cái gì đó giống như một -addtrust lá cờcertbot certonly?

Điểm:6
lá cờ in

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

BairDev avatar
lá cờ cn
Cảm ơn! Tôi đã sử dụng tệp *fullchain*, chính xác như `SSLCertificateFile /etc/letsencrypt/live/co2-avatar.com/fullchain.pem`. Vì vậy, bằng cách nào đó, chứng chỉ trung gian không xuất hiện, điều này có thể giải thích cho lỗi `openssl verify -CAfile .../fullchain.pem .../cert.pem`. Bạn thấy điều này thế nào: *Chứng chỉ trung cấp còn thiếu gì*? Tôi đoán rằng tôi cần sửa (các) chứng chỉ. Bất kỳ gợi ý cho điều đó?
lá cờ in
Trả lời câu hỏi thứ hai của bạn: Lệnh `openssl s_client ... -showcerts` hiển thị cho bạn **tất cả** chứng chỉ do máy chủ gửi. Trong trường hợp của bạn: Thực tế là chỉ có một chứng chỉ được trả về cho thấy (các) chứng chỉ trung gian bị thiếu. Bạn có thể thấy rõ nhất nếu so sánh với đầu ra trong trường hợp bạn đang sử dụng tên miền khác. Ví dụ để so sánh với: ` tiếng vang | openssl s_client -connect belug.de:443 -tên máy chủ belug.de -showcerts` Kiểm tra xem tất cả các chứng chỉ dự kiến ​​có được bao gồm trong tệp `fullchain.pem` của bạn không. (dự kiến ​​​​sẽ thấy nhiều hơn một chứng chỉ ở đó)
lá cờ in
Để trả lời câu hỏi đầu tiên của bạn: Do (các) chứng chỉ trung gian có trong tệp `fullchain.pem` **và** được định cấu hình trong vhost của bạn, nhưng **không** do máy chủ của bạn phân phối, điều này cho thấy rõ ràng rằng một tệp vhost khác là được sử dụng. Kiểm tra các tệp cấu hình Apache khác - Tôi cá là cấu hình vhost trùng nhau.
BairDev avatar
lá cờ cn
Được rồi, bây giờ tất cả các lệnh SSLCertificateFile trong tệp conf của tôi đều trỏ đến *fullchain.pem*. Nhưng chứng chỉ thứ hai trong chính xác tệp này không được gửi. Chỉ thị SSLCertificateChainFile dùng để làm gì (nó không được dùng nữa, phải không)? Một số cấu hình khác dường như chặn tệp fullchain.pem. (vâng, tôi đã khởi động lại apache/httpd)
BairDev avatar
lá cờ cn
Hóa ra phiên bản Apache quá thấp/cũ (

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.