Lỗi “ssl certificate problem unable to get local issuer certificate” là một trong những vấn đề phổ biến mà nhiều lập trình viên và quản trị hệ thống thường gặp phải khi làm việc với các kết nối an toàn qua SSL/TLS. Nó có thể gây ra sự gián đoạn trong quy trình phát triển phần mềm, khiến cho người dùng không thể truy cập các tài nguyên và dịch vụ cần thiết.
Tổng quan về lỗi SSL Certificate

Lỗi này xảy ra khi hệ thống không thể xác minh tính hợp lệ của chứng chỉ SSL vì nó không tìm thấy chứng chỉ của nhà phát hành (issuer certificate) trong kho tin cậy. Điều này có thể dẫn đến nhiều thông báo lỗi khác nhau trong các công cụ như Git, cURL, Postman, hoặc ngay cả trong trình duyệt web.
- Thông báo lỗi: Khi bạn cố gắng thực hiện một yêu cầu HTTPS mà không có chứng chỉ CA thích hợp, bạn sẽ nhận được thông báo lỗi tương tự như sau:
- Trong cURL: SSL certificate problem: unable to get local issuer certificate
- Trong Git: fatal: unable to access ‘https://…’: SSL certificate problem: unable to get local issuer certificate
- Trường hợp thực tế: Ví dụ, khi bạn cố gắng clone một repository từ GitHub qua HTTPS mà không có chứng chỉ CA, bạn sẽ gặp phải lỗi này.
- Hình ảnh minh họa:
Tại sao lỗi này quan trọng cần khắc phục?
Việc khắc phục lỗi này không chỉ giúp bạn tiếp tục công việc mà còn rất quan trọng để đảm bảo bảo mật thông tin. Dưới đây là những lý do chính:
- Bảo mật: Chứng chỉ SSL giúp mã hóa dữ liệu giữa server và client, ngăn chặn các cuộc tấn công man-in-the-middle.
- Kết nối ổn định: Nếu không khắc phục lỗi, bạn sẽ không thể kết nối đến các repositories, API hoặc dịch vụ web, ảnh hưởng nghiêm trọng đến dự án đang thực hiện.
- Rủi ro tiềm ẩn: Việc bỏ qua xác thực chứng chỉ có thể dẫn đến việc hacker dễ dàng xâm nhập vào dữ liệu nhạy cảm.
- Quy trình làm việc gián đoạn: Lỗi này có thể gây ra sự chậm trễ trong quá trình phát triển phần mềm, ảnh hưởng đến năng suất và hiệu quả công việc.
Nguyên lý hoạt động của chuỗi chứng chỉ SSL

Cấu trúc chuỗi chứng chỉ SSL/TLS
Để hiểu rõ hơn về cách hoạt động của chứng chỉ SSL, trước tiên ta cần nắm vững cấu trúc của chuỗi chứng chỉ.
Chuỗi chứng chỉ SSL thường bao gồm ba loại chứng chỉ:
- Root Certificate: Là chứng chỉ gốc mà tất cả các chứng chỉ khác phụ thuộc vào. Nó được cấp bởi một Certificate Authority (CA) uy tín.
- Intermediate Certificate: Là chứng chỉ trung gian, được sử dụng để tạo ra các chứng chỉ server. Nó giúp tăng cường độ tin cậy và bảo mật cho chuỗi chứng chỉ.
- Server Certificate: Là chứng chỉ mà server sử dụng để xác thực danh tính của mình với khách hàng trong quá trình giao tiếp qua SSL/TLS.
Cấu trúc phân cấp giữa các chứng chỉ này rất quan trọng. Nếu thiếu bất kỳ chứng chỉ nào, đặc biệt là Root hoặc Intermediate, bạn có thể gặp phải lỗi “unable to get local issuer certificate”.
Quy trình xác thực SSL tiêu chuẩn
Quy trình xác thực SSL tiêu chuẩn diễn ra qua các bước cơ bản sau:
- Khởi tạo kết nối: Khi client (trình duyệt hoặc ứng dụng) gửi yêu cầu HTTPS đến server, server sẽ trả về chứng chỉ SSL của nó.
- Xác thực chứng chỉ: Client sẽ kiểm tra chứng chỉ server bằng cách xác minh chữ ký số với một trong các chứng chỉ CA đã biết trong kho tin cậy của nó.
- Kiểm tra tính hợp lệ: Client cũng sẽ kiểm tra xem chứng chỉ có hết hạn hay không và xem tên miền có khớp với tên trong chứng chỉ không.
- Thiết lập kết nối an toàn: Nếu mọi thứ đều hợp lệ, client sẽ tiến hành thiết lập một kết nối an toàn với server.
Nguyên nhân gây ra lỗi “Unable To Get Local Issuer Certificate”

Thiếu chứng chỉ CA trong kho tin cậy
Một trong những nguyên nhân chủ yếu gây ra lỗi “unable to get local issuer certificate” là do thiếu chứng chỉ CA trong kho tin cậy của hệ điều hành hoặc ứng dụng.
- Thiếu Root CA: Nếu hệ thống không có chứng chỉ Root CA phù hợp, nó sẽ không thể xác thực được chứng chỉ server.
- Intermediate CA không đầy đủ: Trong trường hợp chứng chỉ Intermediate không được bao gồm trong chuỗi, hệ thống cũng sẽ không thể hoàn thành quá trình xác thực.
- Cấu hình CA path sai: Sự cố cũng có thể xảy ra nếu đường dẫn tới chứng chỉ CA không được cấu hình chính xác trong ứng dụng hoặc hệ điều hành.
- Khác biệt giữa các hệ điều hành: Mỗi OS có cách quản lý kho chứng chỉ khác nhau. Ví dụ, Linux có thể yêu cầu bạn phải cài đặt riêng certifi cacert.pem, trong khi Windows có thể sử dụng Windows Certificate Store.
Vấn đề với chứng chỉ tự ký (Self-signed Certificates)
Chứng chỉ tự ký là một giải pháp phổ biến trong môi trường phát triển, nhưng chúng cũng có thể gây ra lỗi “unable to get local issuer certificate”.
- Đặc điểm của chứng chỉ tự ký: Đây là chứng chỉ mà một cá nhân hoặc tổ chức tự tạo ra mà không dựa trên một CA đáng tin cậy, do đó hầu hết các hệ thống sẽ không tin tưởng mặc định.
- Không được hệ thống chấp nhận: Khi bạn sử dụng chứng chỉ tự ký, trình duyệt hoặc ứng dụng có thể cảnh báo rằng chứng chỉ không hợp lệ, dẫn đến các vấn đề về xác thực.
- Tình huống sử dụng: Thông thường, chứng chỉ tự ký được sử dụng trong môi trường phát triển hoặc mạng nội bộ, nơi mà bạn có thể kiểm soát hoàn toàn môi trường và không cần phải lo lắng về vấn đề bảo mật.
Sự cố liên quan đến Git và các công cụ phát triển
Git và các công cụ phát triển khác cũng có thể gặp phải lỗi này do cách thức mà chúng xử lý chứng chỉ SSL.
- Sử dụng backend SSL khác nhau: Git có thể sử dụng các backend SSL khác nhau như OpenSSL hoặc SChannel trên Windows. Sự khác biệt này có thể dẫn đến các vấn đề tương thích.
- Cấu hình Git mặc định: Một số cấu hình mặc định của Git có thể không đủ để vượt qua quá trình xác thực SSL, dẫn đến lỗi.
- Vấn đề tương thích: Các phiên bản khác nhau của Git, cURL và hệ điều hành cũng có thể không tương thích, gây ra lỗi khi cố gắng kết nối với remote repository.
Các phương pháp xử lý lỗi toàn diện

Cập nhật kho chứng chỉ CA trên hệ thống
Một trong những cách hiệu quả nhất để xử lý lỗi này là cập nhật kho chứng chỉ CA trên hệ thống của bạn.
- Cài đặt chứng chỉ CA gốc: Trước tiên, bạn cần tải xuống và cài đặt chứng chỉ CA gốc từ trang web của CA hoặc một nguồn đáng tin cậy.
- Quản lý CA bundle tùy chỉnh: Bạn có thể tạo và quản lý một bundle tùy chỉnh chứa các chứng chỉ CA mà bạn muốn hệ thống tin tưởng. Hãy chắc chắn rằng bạn đã thêm đường dẫn đúng vào cấu hình của các công cụ bạn sử dụng.
- Xác minh chuỗi chứng chỉ: Sau khi cài đặt chứng chỉ, hãy kiểm tra lại chuỗi chứng chỉ để đảm bảo rằng mọi thứ đã được cấu hình chính xác.
Cấu hình Git để nhận diện chứng chỉ CA
Nếu bạn sử dụng Git, bạn có thể cần phải cấu hình để nhận diện các chứng chỉ CA đã cài đặt.
- Thiết lập http.sslCAInfo: Sử dụng lệnh git config –global http.sslCAInfo /path/to/your/cacert.pem để chỉ định vị trí của chứng chỉ CA.
- Chuyển đổi backend SSL: Nếu bạn đang sử dụng Windows, hãy thử chuyển đổi backend SSL sang SChannel bằng cách thay đổi cấu hình Git.
- Giải quyết các vấn đề với Git LFS: Nếu bạn sử dụng Git LFS, hãy đảm bảo rằng nó cũng được cấu hình để sử dụng chứng chỉ CA mà bạn đã cài đặt.
Giải pháp cho các môi trường phát triển cụ thể
Mỗi môi trường phát triển có thể yêu cầu các giải pháp khác nhau để xử lý lỗi SSL.
- Visual Studio Code: Bạn có thể cấu hình SSL và proxy trong Visual Studio Code bằng cách chỉnh sửa file settings.json.
- Postman: Trong Postman, bạn có thể thiết lập chứng chỉ CA và tùy chọn SSL trong phần Settings.
- Các IDE khác: Tương tự, IntelliJ, Eclipse và WebStorm đều có các tùy chọn cấu hình riêng cho chứng chỉ SSL.
- CI/CD và Docker: Đối với các công cụ CI/CD và môi trường Docker, bạn cần đảm bảo rằng chứng chỉ CA đã được cài đặt trong container hoặc pipeline.
Hướng dẫn từng bước cho hệ điều hành cụ thể

Khắc phục lỗi trên Windows
Windows Certificate Store là nơi lưu trữ chứng chỉ trên hệ điều hành này. Để khắc phục lỗi, bạn cần thực hiện các bước sau:
- Thêm chứng chỉ vào Windows Certificate Store: Mở công cụ quản lý chứng chỉ (certmgr.msc), sau đó nhập chứng chỉ vào thư mục Trusted Root Certification Authorities.
- Sử dụng PowerShell: Bạn có thể sử dụng các lệnh PowerShell để quản lý và kiểm tra chứng chỉ. Ví dụ: Get-ChildItem Cert:\LocalMachine\Root.
- Cấu hình Git: Đảm bảo rằng Git được cấu hình sử dụng Windows Certificate Store thay vì CA bundle.
Xử lý lỗi trên MacOS
Trên MacOS, Keychain Access là nơi lưu trữ chứng chỉ. Để khắc phục lỗi, bạn cần:
- Cài đặt chứng chỉ vào Keychain Access: Mở Keychain Access và kéo thả chứng chỉ vào danh sách. Đảm bảo rằng bạn đã chọn “Always Trust”.
- Cấu hình Git và cURL: Cần đảm bảo rằng Git và cURL được cấu hình để sử dụng chứng chỉ từ Keychain.
- Kiểm tra và xác minh: Sử dụng Terminal để kiểm tra và xác minh chuỗi chứng chỉ đã được cài đặt đúng.
Giải pháp trên Linux/Unix
Linux và Unix có cấu trúc quản lý chứng chỉ hơi khác. Để khắc phục lỗi này, bạn cần:
- Cập nhật kho ca-certificates: Sử dụng lệnh sudo update-ca-certificates để thêm và cập nhật chứng chỉ CA trên hệ thống.
- Cấu hình Git và OpenSSL: Đảm bảo rằng Git và OpenSSL được cấu hình để nhận diện chứng chỉ CA mới.
- Sử dụng các công cụ: Sử dụng update-ca-certificates và certutil để quản lý chứng chỉ.
Xử lý lỗi trong các ngữ cảnh cụ thể

Giải quyết lỗi khi làm việc với GitHub/GitLab
Khi làm việc với GitHub hoặc GitLab qua HTTPS, lỗi SSL có thể xuất hiện khá thường xuyên.
- Cấu hình cho Git hosting: Đảm bảo rằng các chứng chỉ CA đã được cài đặt và cấu hình đúng cho các dịch vụ Git hosting.
- Xử lý lỗi clone, pull, push: Kiểm tra các lệnh thực hiện clone hoặc push và đảm bảo rằng chúng không bị lỗi SSL.
- Thiết lập SSH: Một giải pháp khả thi khác là sử dụng SSH thay vì HTTPS để tránh các vấn đề liên quan đến SSL.
Khắc phục lỗi trong môi trường CI/CD
Trong môi trường CI/CD, việc xử lý chứng chỉ SSL cần được thực hiện một cách cẩn thận.
- Cấu hình Jenkins/GitHub Actions: Đảm bảo rằng chứng chỉ CA được cài đặt trong môi trường CI/CD.
- Thiết lập chứng chỉ trong pipeline: Cần có các bước trong pipeline để cài đặt và xác minh chứng chỉ trong quá trình build.
- Docker containers: Nếu sử dụng Docker, hãy đảm bảo kiểm tra và xử lý các vấn đề SSL trong quá trình chạy containers.
Giải quyết lỗi trong Docker và môi trường container
Docker cũng có thể gặp phải vấn đề liên quan đến chứng chỉ SSL.
- Cài đặt chứng chỉ CA trong Docker image: Bạn cần thêm chứng chỉ CA vào Docker image của bạn trong Dockerfile.
- Thiết lập Docker tin tưởng chứng chỉ CA: Sử dụng lệnh để cấu hình Docker tin tưởng chứng chỉ CA tùy chỉnh.
- Truyền chứng chỉ CA từ host vào container: Có thể sử dụng volume để truyền chứng chỉ từ máy chủ vào container.
Giải pháp tạm thời và cân nhắc bảo mật

Vô hiệu hóa xác thực SSL (không khuyến nghị)
Dù đây không phải là một giải pháp an toàn, vô hiệu hóa xác thực SSL có thể giúp bạn giải quyết vấn đề tạm thời.
- Lệnh Git: Bạn có thể sử dụng lệnh git config –global http.sslVerify false, nhưng hãy nhớ rằng điều này mở ra nguy cơ bảo mật lớn.
- Rủi ro bảo mật: Nếu bạn bỏ qua xác thực SSL, bạn có thể trở thành nạn nhân của các cuộc tấn công man-in-the-middle.
- Giải pháp tạm thời: Chỉ nên áp dụng trong các môi trường phát triển cô lập và không nên sử dụng trong sản xuất.
Sử dụng proxy và tunnel an toàn
Một lựa chọn khác là sử dụng proxy hoặc tunnel để an toàn hơn.
- Thiết lập proxy với chứng chỉ hợp lệ: Cấu hình proxy để sử dụng chứng chỉ hợp lệ, giúp đảm bảo rằng kết nối luôn an toàn.
- SSH tunnel: Sử dụng SSH tunnel để bypass vấn đề SSL có thể là một giải pháp tốt, nếu bạn biết cách cấu hình.
- Cài đặt VPN: Sử dụng VPN để tạo kết nối an toàn cũng là một cách hữu ích để xử lý vấn đề.
Xử lý lỗi trong môi trường doanh nghiệp với firewall
Trong môi trường doanh nghiệp, firewall có thể gây ra các vấn đề liên quan đến SSL.
- Cấu hình MITM proxy: Nếu công ty bạn sử dụng MITM proxy, hãy làm việc với đội IT để cấu hình chính xác.
- SSL inspection: Hãy chú ý đến SSL inspection và cách nó có thể ảnh hưởng đến chứng chỉ SSL của bạn.
- Checklist: Cung cấp checklist cho nhóm IT để xác định và giải quyết các vấn đề liên quan đến firewall.
Công cụ và lệnh kiểm tra hữu ích

Kiểm tra và phân tích chứng chỉ SSL với OpenSSL
OpenSSL là một công cụ mạnh mẽ để kiểm tra và phân tích chứng chỉ SSL.
- Lệnh openssl s_client: Sử dụng lệnh openssl s_client -connect yourdomain.com:443 để kiểm tra kết nối SSL và nhận thông tin về chứng chỉ.
- Phân tích chuỗi chứng chỉ: Bạn có thể trích xuất và phân tích chuỗi chứng chỉ từ đầu ra của lệnh này.
- Xác minh chứng chỉ với CA đã biết: OpenSSL cũng cho phép bạn xác minh chứng chỉ bằng cách so sánh với các CA đã biết.
Công cụ chẩn đoán cho Git và SSL
Có nhiều công cụ hỗ trợ việc chẩn đoán các vấn đề liên quan đến SSL và Git.
- GIT_CURL_VERBOSE: Sử dụng biến môi trường này để debug các vấn đề SSL liên quan đến Git.
- Công cụ online: Các công cụ như SSL Labs và SSL Checker có thể giúp bạn kiểm tra tình trạng SSL của website.
- Truy xuất thông tin từ logs: Hãy kiểm tra logs để xác định thông tin cụ thể về lỗi SSL mà bạn gặp phải.
Tự động hóa việc kiểm tra và xử lý lỗi
Tạo ra các script để tự động hóa việc kiểm tra và xử lý lỗi SSL là một cách tuyệt vời để giảm thiểu rủi ro.
- Script mẫu: Bạn có thể tạo một script để kiểm tra và cài đặt chứng chỉ CA, đảm bảo rằng hệ thống luôn được cập nhật.
- Tích hợp vào quy trình CI/CD: Tích hợp kiểm tra SSL vào pipeline CI/CD của bạn giúp phát hiện lỗi SSL ngay từ đầu.
- Cảnh báo tự động: Thiết lập cảnh báo tự động khi phát hiện vấn đề SSL là một cách hữu ích để đảm bảo rằng bạn luôn được thông báo kịp thời.
Phòng ngừa lỗi ssl certificate trong tương lai

Xây dựng kế hoạch quản lý chứng chỉ CA
Để ngăn ngừa lỗi SSL trong tương lai, bạn cần xây dựng một kế hoạch quản lý chứng chỉ CA hiệu quả.
- Danh sách chứng chỉ CA: Tạo danh sách các chứng chỉ CA cần thiết cho tổ chức và thường xuyên kiểm tra.
- Cập nhật định kỳ: Quy trình cập nhật chứng chỉ CA định kỳ là rất quan trọng để đảm bảo mọi thứ luôn được cập nhật.
- Kiểm tra tự động: Sử dụng các công cụ tự động để kiểm tra các vấn đề chứng chỉ và gửi báo cáo.
Triển khai PKI nội bộ hiệu quả
Một hệ thống PKI (Public Key Infrastructure) có thể giúp bạn quản lý chứng chỉ tốt hơn.
- Thiết lập hệ thống PKI: Các bước thiết lập hệ thống PKI cho môi trường doanh nghiệp cần được thực hiện một cách cẩn thận.
- Phân phối chứng chỉ: Quá trình phân phối chứng chỉ CA cần được quản lý chặt chẽ để đảm bảo an toàn.
- Cấp và thu hồi chứng chỉ: Cần có quy trình rõ ràng để cấp và thu hồi chứng chỉ nhằm đảm bảo an toàn cho tổ chức.
Đào tạo và hướng dẫn nhóm phát triển
Cuối cùng, đào tạo nhóm phát triển về chứng chỉ SSL là rất quan trọng.
- Tài liệu hướng dẫn: Cung cấp tài liệu chi tiết về xử lý lỗi SSL để nhóm có thể tham khảo.
- Quy trình chuẩn: Xây dựng quy trình chuẩn để tránh lỗi trong quá trình phát triển.
- Đào tạo định kỳ: Tổ chức các buổi đào tạo định kỳ về bảo mật SSL/TLS cho đội phát triển là một cách hiệu quả để nâng cao nhận thức.
Câu Hỏi Thường Gặp (FAQ)
Lỗi “unable to get local issuer certificate” có giống với các lỗi SSL khác không?
Điều này hoàn toàn đúng, lỗi này có nhiều điểm tương đồng với các lỗi SSL khác như “self-signed certificate” và “certificate not trusted”. Tuy nhiên, mỗi loại lỗi đều có nguyên nhân và cách khắc phục riêng.
- So sánh với các lỗi khác: Lỗi self-signed certificate xảy ra khi chứng chỉ không được cấp bởi một CA uy tín, trong khi “certificate not trusted” thường là do thiếu hoặc không chính xác chứng chỉ CA.
- Bảng so sánh: Tạo một bảng so sánh các thông báo lỗi cùng với nguyên nhân và cách khắc phục sẽ giúp bạn dễ dàng nhận diện vấn đề.
Tại sao tôi vẫn gặp lỗi sau khi đã cài đặt chứng chỉ CA?
Nếu bạn đã cài đặt chứng chỉ CA nhưng vẫn gặp lỗi, có thể do một số nguyên nhân sau:
- Kiểm tra đường dẫn: Đảm bảo rằng đường dẫn đến chứng chỉ CA là chính xác và quyền truy cập file chứng chỉ là đúng.
- Vấn đề cache: Đôi khi, ứng dụng có thể lưu trữ thông tin cũ trong cache, vì vậy khởi động lại ứng dụng có thể giúp giải quyết vấn đề.
- Quy trình debug: Theo dõi từng bước trong quy trình để xác định nguyên nhân gốc rễ.
Làm thế nào để xử lý lỗi này khi làm việc từ xa hoặc qua VPN?
Khi làm việc từ xa hoặc qua VPN, bạn có thể gặp nhiều vấn đề liên quan đến SSL.
- Hướng dẫn xử lý vấn đề SSL: Đảm bảo rằng bạn đã cấu hình VPN và proxy một cách chính xác để tránh các vấn đề liên quan đến chứng chỉ SSL.
- Tương tác với firewall: Hãy chú ý đến cách firewall của doanh nghiệp có thể ảnh hưởng đến kết nối SSL của bạn.
- Môi trường làm việc an toàn: Đảm bảo rằng bạn đã tạo ra một môi trường làm việc từ xa an toàn với các biện pháp bảo mật hợp lý.
Kết luận
Lỗi “ssl certificate problem unable to get local issuer certificate” là một vấn đề phổ biến trong quá trình phát triển phần mềm và quản trị hệ thống. Việc hiểu rõ nguyên nhân và cách thức xử lý lỗi này không chỉ giúp bạn khắc phục vấn đề một cách nhanh chóng mà còn đảm bảo tính bảo mật cho hệ thống của bạn. Hy vọng rằng bài viết này đã cung cấp cho bạn cái nhìn sâu sắc và các phương pháp cụ thể để xử lý lỗi này một cách hiệu quả.