Tôi đang cố chạy trình cài đặt đa phương tiện của GitLab và sử dụng chứng chỉ SSL của tổ chức tôi, nhưng các ứng dụng khách SSL phàn nàn rằng tổ chức phát hành chứng chỉ không xác định. Làm cách nào để định cấu hình chứng chỉ trung gian trong chuỗi tin cậy?
Quá trình thiết lập của tôi bắt đầu bằng việc chạy phiên bản GitLab mới nhất, hiển thị các cổng cho HTTPS và HTTP, trong số các cổng khác:
sudo docker run --detach --hostname myserver.myorg.org --publish 1443:443 --publish 1080:80 \
--publish 2222:22 --publish 5005:5005 --name gitlab1 \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:14.2.3-ce.0
Điều đó tạo ra một loạt các cấu hình mặc định trong /srv/gitlab/config
, vì vậy tôi đi và đặt URL của máy chủ trong gitlab.rb
:
bên ngoài_url 'https://myserver.myorg.org'
Tôi đã nhận được tệp chứng chỉ và tệp khóa từ tổ chức của mình, vì vậy tôi sao chép chúng vào /srv/gitlab/config/ssl
thư mục như myserver.myorg.org.crt
và myserver.myorg.org.key
. Sau đó, tôi cấu hình lại máy chủ GitLab:
sudo docker exec -it gitlab1 bash -c "gitlab-ctl cấu hình lại"
Bây giờ tôi cố gắng xác thực cấu hình SSL:
tiếng vang | gnutls-cli -p1443 myserver.myorg.org
Tôi nhận được một loạt lỗi trong đầu ra, bao gồm:
...
Đã xử lý 129 chứng chỉ CA.
Đang giải quyết 'myserver.myorg.org:1443'...
Đang kết nối với '127.0.0.1:1443'...
- Loại chứng chỉ: X.509
- Có danh sách chứng chỉ gồm 1 chứng chỉ.
...
- Trạng thái: Chứng chỉ KHÔNG đáng tin cậy. Tổ chức phát hành chứng chỉ không xác định.
*** Xác minh PKI của chứng chỉ máy chủ không thành công...
*** Lỗi nghiêm trọng: Lỗi trong chứng chỉ.
Có vẻ như tôi không có chuỗi tin cậy hoàn chỉnh. Tổ chức phát hành chứng chỉ của tổ chức chúng tôi là "CN=DigiCert TLS RSA SHA256 2020 CA1,O=DigiCert Inc,C=US". Tôi tìm thấy chứng chỉ của họ trên Trang web của họvà đã tải xuống cái cụ thể đó:
wget https://cacerts.digicert.com/DigiCertTLRSRSASHA2562020CA1-1.crt.pem
Tôi đã trích xuất phiên bản văn bản của chứng chỉ:
openssl x509 -in DigiCertTLSRSASHA2562020CA1-1.crt.pem -text
...
-----BẮT ĐẦU GIẤY CHỨNG NHẬN----
MIIEvjCCA6agAwIBAgIQBtjZBNVYQ0b2ii+nVCJ+xDANBgkqhkiG9w0BAQsFADBh
...
A7sKPPcw7+uvTPyLNhBzPvOk
-----GIẤY CHỨNG NHẬN KẾT THÚC-----
Tôi đã thêm nó vào chứng chỉ của tổ chức tôi trong /srv/gitlab/config/ssl/myserver.myorg.org.crt
nên bây giờ nó có chứng chỉ của tổ chức trước, sau đó là chứng chỉ Digicert.
-----BẮT ĐẦU GIẤY CHỨNG NHẬN----
... chứng chỉ của tổ chức chúng tôi ...
-----GIẤY CHỨNG NHẬN KẾT THÚC-----
-----BẮT ĐẦU GIẤY CHỨNG NHẬN----
... Chứng chỉ Digicert tôi vừa tải về
-----GIẤY CHỨNG NHẬN KẾT THÚC-----
Đây là bước tôi ít tự tin nhất. Tôi đang dựa trên Hướng dẫn GitLab:
Đảm bảo bạn sử dụng chuỗi chứng chỉ đầy đủ để ngăn lỗi SSL khi máy khách kết nối. Thứ tự chuỗi chứng chỉ đầy đủ phải bao gồm chứng chỉ máy chủ trước, tiếp theo là tất cả các chứng chỉ trung gian, với CA gốc cuối cùng.
Điều đó có nghĩa là dán hai chứng chỉ vào cùng một tệp phải không?
Dù sao, tôi đã chạy cấu hình lại
lệnh và kiểm tra lại:
sudo docker exec -it gitlab1 bash -c "gitlab-ctl cấu hình lại"
...
tiếng vang | gnutls-cli -p1443 myserver.myorg.org
Tôi vẫn gặp các lỗi tương tự, bao gồm "Có danh sách chứng chỉ gồm 1 chứng chỉ." Điều đó khiến tôi nghĩ rằng mình đã không thêm chứng chỉ Digicert vào chuỗi đúng cách. Tôi cũng đã thử đặt chứng chỉ Digicert trước chứng chỉ của tổ chức chúng tôi.
Chỉ để đảm bảo rằng các chứng chỉ hợp lệ, tôi đã làm theo bài này. Các openssl s_server
và openssl s_client
hoạt động tốt với nhau, vì vậy tôi nghĩ vấn đề là do cấu hình GitLab của tôi.