Khắc phục lỗi Git: SSL certificate problem: self signed certificate

intermediate🌐 Networking2026-07-14| Windows (Git Bash), macOS, Linux, Mạng doanh nghiệp, Tường lửa có kiểm tra SSL (SSL Inspection)

Error Message

fatal: unable to access 'https://github.com/...': SSL certificate problem: self signed certificate in certificate chain
#git#ssl#devops#khắc phục sự cố

Tình huống lỗiBạn đang trong quá trình làm việc, chuẩn bị push một bản cập nhật quan trọng thì Git đột ngột chặn đứng bạn. Thay vì thanh tiến trình quen thuộc, bạn nhận được một thông báo lỗi gây ức chế:

fatal: unable to access 'https://github.com/...': SSL certificate problem: self signed certificate in certificate chain

Điều này thường xảy ra khi Git không thể xác minh danh tính của máy chủ. Mặc dù trông có vẻ như GitHub hoặc GitLab bị sập, nhưng thủ phạm hầu như luôn nằm ngay trên máy cục bộ hoặc trong mạng văn phòng của bạn.

Tại sao Git chặn kết nối của bạn?Git dựa vào thư viện cURL để giao tiếp mạng. Khi bạn kết nối qua HTTPS, Git mong đợi một chứng chỉ được ký bởi một Cơ quan cấp chứng chỉ (CA) tin cậy toàn cầu. Lỗi "self signed certificate" thường kích hoạt vì một trong ba lý do sau:

  • Proxy và kiểm tra bảo mật doanh nghiệp: Các công cụ bảo mật như Zscaler, Fortinet, hoặc Blue Coat thường chặn lưu lượng truy cập để quét mối đe dọa. Chúng thay thế chứng chỉ GitHub thật bằng chứng chỉ do công ty cấp mà Git không nhận diện được.- Sự can thiệp của phần mềm diệt virus: Các bộ phần mềm như Kaspersky hoặc Bitdefender đôi khi tự chèn vào chuỗi SSL để giám sát lưu lượng web, hoạt động như một người đứng giữa (man-in-the-middle) 'thân thiện'.- Gói CA (CA Bundles) lỗi thời: Bản cài đặt Git của bạn có thể đang tìm kiếm chứng chỉ trong một tệp ca-bundle.crt cũ đã không được cập nhật trong nhiều năm.## Giải pháp 1: Cách xử lý nhanh (và không an toàn)Nếu bạn đang gấp và làm việc trên một mạng riêng tư, đáng tin cậy, bạn có thể bỏ qua bước kiểm tra này. Hãy thận trọng: việc tắt xác minh SSL khiến bạn dễ bị tấn công giả mạo (Man-in-the-Middle - MitM). Nó giống như việc để cửa trước không khóa chỉ vì chìa khóa bị kẹt. Để tắt xác minh trên toàn hệ thống:
git config --global http.sslVerify false

Nếu bạn chỉ muốn bỏ qua kiểm tra cho một lệnh duy nhất:

git -c http.sslVerify=false clone https://github.com/username/repo.git

Giải pháp 2: Sử dụng Windows Secure Channel (Khuyên dùng cho Windows)Nếu bạn đang sử dụng máy tính Windows, đây là cách khắc phục tinh tế nhất. Theo mặc định, Git sử dụng thư viện OpenSSL, thư viện này duy trì danh sách các chứng chỉ tin cậy riêng biệt. Bạn có thể yêu cầu Git sử dụng Windows Certificate Store thay thế.

git config --global http.sslBackend schannel

Điều này cho phép Git tự động tin tưởng bất kỳ chứng chỉ nào mà bộ phận IT của bạn đã phê duyệt thông qua Group Policy. Đây là giải pháp 'thiết lập một lần và quên đi' mà vẫn duy trì tính bảo mật cao.

Giải pháp 3: Thêm chứng chỉ CA của doanh nghiệpKhi bạn bắt buộc phải sử dụng OpenSSL (thường thấy trên Linux và macOS), bạn cần hướng dẫn Git tin tưởng chứng chỉ gốc (root certificate) của công ty bạn một cách thủ công.

Bước 1: Lấy chứng chỉTrên Windows, mở URL kho lưu trữ trong Chrome. Nhấp vào biểu tượng Khóa > Kết nối an toàn > Chứng chỉ hợp lệ. Trong tab Details, tìm chứng chỉ cấp cao nhất trong hệ thống phân cấp và xuất nó dưới dạng tệp Base-64 encoded X.509 (.CER).

Trên macOS hoặc Linux, bạn có thể lấy chuỗi chứng chỉ trực tiếp bằng lệnh sau:

openssl s_client -showcerts -connect github.com:443 </dev/null

Bước 2: Trỏ Git đến tệp tinKhi bạn đã có tệp (ví dụ: company-root.pem), hãy cho Git biết nơi tìm thấy nó:

git config --global http.sslcainfo "C:/Users/YourName/certs/company-root.pem"

Xác minhKiểm tra kết nối của bạn mà không cần sửa đổi bất kỳ mã nguồn nào bằng cách chạy lệnh ls-remote. Lệnh này yêu cầu máy chủ cung cấp danh sách các nhánh và thẻ (tags).

git ls-remote https://github.com/your-org/your-repo.git

Nếu bạn thấy một danh sách các mã hash và tham chiếu (refs), bạn đã vượt qua rào cản thành công.

Làm việc trong mạng doanh nghiệpViệc gỡ lỗi kết nối trong môi trường doanh nghiệp thường giống như công việc thám tử. Nếu bạn nghi ngờ IP của mình đang được định tuyến một cách kỳ lạ, các công cụ như IP Subnet Calculator có thể giúp bạn xác minh xem mình đang kết nối tới một gateway nội bộ hay một proxy công cộng. Tôi thường sử dụng nó để xác định các dải NO_PROXY cho các phiên bản GitLab nội bộ.

Cuối cùng, hãy kiểm tra các biến môi trường của bạn. Chạy lệnh env | grep -i proxy trong terminal. Nếu bạn thấy một proxy đã được định nghĩa, hãy đảm bảo các cài đặt HTTP_PROXYHTTPS_PROXY của bạn nhất quán. Sự không khớp ở đây là nguyên nhân phổ biến gây ra lỗi bắt tay SSL (SSL handshake).

Related Error Notes