Cách khắc phục lỗi SSL 'CERTIFICATE_VERIFY_FAILED' trên Ansible Galaxy

Trung bình🔧 Ansible2026-07-27| Ansible 2.9 - 2.17+, Python 3.9 - 3.12, Ubuntu, RHEL, macOS Sonoma/Ventura

Error Message

ERROR! Unknown error when attempting to call Galaxy: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123)>
#ansible#devops#ssl#python#linux

Vấn đề

Bạn đã sẵn sàng triển khai, nhưng ansible-galaxy lại khiến bạn dừng bước. Lỗi này thường xảy ra khi môi trường Python chạy Ansible không thể xác thực chứng chỉ SSL của máy chủ Galaxy. Bảo mật là ưu tiên hàng đầu, nhưng việc thiếu liên kết chứng chỉ trong chuỗi cục bộ (local chain) thường làm hỏng quá trình bắt tay (handshake).

Lỗi này thường hiển thị trong terminal của bạn như sau:

ERROR! Unknown error when attempting to call Galaxy: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123)>

TL;DR: Cách xử lý nhanh "Cần sửa ngay lập tức"

Nếu bạn đang làm việc trong một sandbox cục bộ an toàn và cần bỏ qua bước kiểm tra ngay lập tức, hãy sử dụng cờ --ignore-certs. Đây là một giải pháp nhanh chóng, mặc dù không phải là giải pháp lâu dài cho các môi trường production.

ansible-galaxy collection install community.general --ignore-certs

Để áp dụng điều này cho toàn bộ phiên làm việc mà không cần nhập cờ mỗi lần, hãy export biến môi trường sau:

export ANSIBLE_GALAXY_IGNORE_CERTS=True

Tại sao điều này lại xảy ra?

Ansible dựa vào các thư viện urllib hoặc requests của Python để tải nội dung. Kể từ Python 3.6, các thư viện này đã trở nên khắt khe hơn nhiều trong việc xác thực chuỗi chứng chỉ. Bạn có thể đang gặp phải một trong ba trở ngại sau:

  • Chứng chỉ hệ điều hành cũ kỹ: Gói ca-certificates cục bộ của bạn đã không được cập nhật trong nhiều tháng và nó không nhận diện được CA mới hơn mà galaxy.ansible.com sử dụng.
  • Sự can thiệp của doanh nghiệp: Nhiều công ty sử dụng "Deep Packet Inspection" thông qua các proxy như Zscaler hoặc Blue Coat. Các dịch vụ này thay thế chứng chỉ Galaxy thật bằng chứng chỉ tự ký của doanh nghiệp mà máy tính của bạn chưa tin tưởng.
  • Sự cô lập của macOS: Các phiên bản Python được cài đặt thông qua trình cài đặt .pkg chính thức của macOS thường bỏ qua hoàn toàn Keychain của hệ thống.

Các bước khắc phục chi tiết

1. Làm mới kho chứng chỉ Linux

Các bản phân phối Linux cần được làm mới thường xuyên các tổ chức phát hành chứng chỉ gốc (root authorities) đáng tin cậy. Đây thường là điều đầu tiên bạn nên thử trên máy chủ hoặc instance WSL.

Ubuntu/Debian:

sudo apt-get update
sudo apt-get install --reinstall ca-certificates
sudo update-ca-certificates

CentOS/RHEL 8 & 9:

sudo dnf upgrade ca-certificates
sudo update-ca-trust

2. Script chứng chỉ Python trên macOS

Người dùng macOS thường xuyên gặp phải lỗi này vì Python không tự động liên kết với các chứng chỉ gốc của hệ thống. Hãy kiểm tra trong thư mục Applications của bạn. Python đi kèm với một script lệnh cụ thể để giải quyết chính xác vấn đề đau đầu này.

# Check your version first; this example uses 3.12
/Applications/Python\ 3.12/Install\ Certificates.command

Ngoài ra, bạn có thể buộc Python sử dụng gói certifi, vốn được cập nhật thường xuyên hơn hệ điều hành:

pip install --upgrade certifi

3. Thêm các gói CA của doanh nghiệp

Khi bạn đứng sau tường lửa của doanh nghiệp, bạn phải chỉ định chính xác cho Ansible nơi lưu trữ chứng chỉ gốc của công ty. Hãy yêu cầu đội IT cung cấp tệp company-root-ca.pem. Sau khi có tệp đó, hãy trỏ các biến môi trường của bạn đến đường dẫn đó.

export REQUESTS_CA_BUNDLE=/etc/pki/tls/certs/corporate-proxy-ca.pem
export SSL_CERT_FILE=/etc/pki/tls/certs/corporate-proxy-ca.pem
ansible-galaxy collection install community.aws

4. Thiết lập khắc phục vĩnh viễn trong ansible.cfg

Bạn mệt mỏi với việc export các biến? Bạn có thể nhúng cấu hình trực tiếp vào dự án của mình. Mở tệp ansible.cfg và thêm phần sau:

[galaxy]
ignore_certs = True

Cảnh báo: Chỉ sử dụng ignore_certs = True nếu bạn đang ở trong một mạng nội bộ an toàn đã biết. Việc tắt xác thực trên Wi-Fi công cộng sẽ khiến bạn trở thành mục tiêu dễ dàng cho các cuộc tấn công Man-in-the-Middle (MITM).

Kiểm tra kết nối

Kiểm tra xem việc khắc phục có hiệu quả hay không bằng cách chạy lệnh cài đặt ở chế độ chi tiết (verbose). Cờ -vvv sẽ cho bạn thấy chính xác URL nào đang được gọi và kết nối có thể bị treo ở đâu.

ansible-galaxy collection install community.general -vvv

Bạn cũng có thể chạy lệnh Python một dòng này để kiểm tra kết nối thô. Nếu nó trả về 200, đường dẫn SSL của bạn đã chính thức thông suốt:

python3 -c "import urllib.request; print(urllib.request.urlopen('https://galaxy.ansible.com').getcode())"

Tóm tắt

Lỗi CERTIFICATE_VERIFY_FAILED là một tính năng bảo mật, không phải là lỗi phần mềm. Mặc dù --ignore-certs có tác dụng khắc phục nhanh trong 10 giây, nhưng cách tiếp cận chuyên nghiệp là cập nhật ca-certificates hoặc ánh xạ CA của doanh nghiệp bạn. Việc giữ cho kho chứng chỉ luôn mới đảm bảo quá trình tự động hóa của bạn vừa hoạt động tốt vừa an toàn.

Related Error Notes