Lỗi TLS chỉ trên VPN công ty: sửa đúng kho tin cậy
Cùng công cụ, cùng laptop, chỉ VPN làm hỏng TLS. Đọc thông báo, tìm gói CA mà tệp nhị phân đọc, và thêm một gốc thay vì tắt các kiểm tra.
Bản dựng Go, bản cài Composer và ứng dụng khách Python đều chạy được ở nhà và đều thất bại bên trong VPN của công ty. Mẫu hình đó nói về đường đi, không phải về ứng dụng. Một thứ gì đó trên đường hầm đã thay đổi chuỗi chứng chỉ mà tiến trình của bạn nhìn thấy, hoặc đã đặt lại bắt tay trước khi bất kỳ chuỗi nào đến. Hai lỗi trông giống nhau trong terminal và đòi hỏi những phản ứng hoàn toàn khác nhau.
Ba thông báo, ba cơ chế
Lỗi x509 certificate signed by unknown authority nghĩa là một chuỗi đã được dựng và gốc của nó thiếu trong kho tin cậy mà tiến trình đó dùng. Lỗi self-signed certificate in certificate chain thường nghĩa là một proxy kiểm tra đã trả lời bằng chứng chỉ của chính nó, và đó là chuỗi mà môi trường chạy của bạn không nhận ra. SSL EOF trong lúc bắt tay nghĩa là kết nối đã đóng trước khi bất kỳ chứng chỉ dùng được nào được gửi, và đó là một thiết bị trung gian từ chối ClientHello, không phải vấn đề tin cậy chút nào.
Thêm cờ không an toàn làm cả ba thông báo biến mất trong khi việc chặn vẫn còn, và nó bỏ đi kiểm tra vốn sẽ bắt được kẻ tấn công thật.
Tìm gói mà tiến trình thực sự đọc
Gốc của công ty được cài trong kho của Windows sửa các trình duyệt và ứng dụng .NET tham vấn kho hệ thống. Nó không làm gì cho bản dựng chạy trong container, vốn mang gói CA riêng, và cũng không làm gì cho tiến trình Python dùng certifi hay tiến trình Node dùng danh sách đi kèm của nó. Go đọc tập hệ thống của môi trường mà tệp nhị phân chạy, nghĩa là container chứ không phải laptop. Vì thế một máy vừa tạo ra trình duyệt chạy được vừa tạo ra công cụ dựng thất bại.
Hỏi công cụ thay vì giả định. python3 -c "import ssl; print(ssl.get_default_verify_paths())" in ra các tệp mà Python sẽ tham vấn, và node -e "console.log(process.env.NODE_EXTRA_CA_CERTS)" cho biết đã có ghi đè được đặt chưa. Với container, chạy cùng kiểm tra đó bên trong image, vì đó là môi trường mà bản dựng thực sự dùng.
Cài một gốc ngay nơi bản dựng chạy
Lấy gốc kiểm tra từ bộ phận IT dưới dạng tệp PEM và xác minh dấu vân tay qua một kênh riêng trước khi tin nó. Trên các image dựa trên Debian, sao chép nó vào /usr/local/share/ca-certificates/ và chạy update-ca-certificates; các image thuộc họ RHEL dùng update-ca-trust sau khi đặt tệp vào /etc/pki/ca-trust/source/anchors/. Trong bản dựng container, thêm các bước đó trước lệnh thất bại để lớp được lưu đệm phía trên bản cài phụ thuộc.
Với devcontainer cục bộ, gắn PEM và chạy cùng lệnh cập nhật lúc khởi động thay vì nướng nó vào một image cá nhân mà không ai khác tái tạo được. Các công cụ mang gói riêng cần ghi đè có tài liệu riêng: pip có thiết lập chứng chỉ, npm có thiết lập cafile, và phần lớn các công cụ khác chấp nhận biến môi trường chuẩn.
Đây không phải là chấp nhận bất kỳ chứng chỉ nào. Bạn đang thêm một gốc cụ thể, lấy từ bên thực hiện kiểm tra, vào một môi trường, và xác minh vẫn bật cho mọi chuỗi khác. Ghi lại tệp nào đã được thêm và khi nào hết hạn, vì gốc kiểm tra được gia hạn như mọi CA khác.
Khi bắt tay chết trước một chứng chỉ
Nếu không có gì được trình ra, không thay đổi kho tin cậy nào giúp được. So sánh cùng yêu cầu với đường hầm bật và tắt, rồi kiểm tra chuỗi trực tiếp bằng openssl s_client -connect host:443 -servername host -showcerts. Kết nối hoàn tất bên ngoài VPN và bị đặt lại bên trong là quyết định chính sách của thiết bị trung gian, và cách chữa là ngoại lệ cho máy chủ đó, không phải một chứng chỉ khác. Đề nghị cho registry gói hoặc điểm cuối API đi qua mà không bị sửa đổi.
Tách đường hầm để công cụ đi vòng VPN tránh được kiểm tra cho lưu lượng đó, điều có thể vi phạm chính sách và không làm công cụ đáng tin.
Ghi lại kết quả theo từng công cụ
Một ghi chú ngắn liệt kê tệp nhị phân, tệp tin cậy mà nó đọc, biến môi trường đang liên quan và ngoại lệ đã được phê duyệt giúp người tiếp theo tiết kiệm toàn bộ việc chẩn đoán. Giữ ghi chú theo từng công cụ chứ không phải theo laptop, vì laptop hiếm khi là thứ đã thay đổi.
Và giữ hai câu riêng trong phiếu: chúng tôi đã cài một gốc của công ty cụ thể, và chúng tôi đã tắt xác minh. Chỉ một trong hai là hành động hỗ trợ.