
1. Webase部署中SSL连接错误的典型场景还原那天下午我正在客户现场部署WeBASE区块链中间件平台。当在Ubuntu 20.04服务器上执行python3 deploy.py installAll命令时控制台突然卡在了下载依赖包的环节。屏幕上赫然显示着SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123)这个报错直接中断了整个安装流程。作为部署过数十次WeBASE的老手我立刻意识到这是Python的SSL证书验证机制在作祟——系统无法验证下载服务器的SSL证书合法性。这种情况通常发生在以下几种环境企业内网部署时使用了自签名证书的镜像源操作系统预装的CA根证书不完整常见于精简版LinuxPython安装时未正确配置SSL证书路径网络中间设备如防火墙对HTTPS流量进行了拦截2. SSL证书验证机制的底层原理要彻底解决这个问题我们需要先理解Python的SSL验证机制。当Python发起HTTPS请求时比如通过pip下载依赖包会经历以下验证流程证书链验证Python会检查服务器返回的证书是否由受信任的CA签发主机名匹配验证证书中的CNCommon Name或SANSubject Alternative Name是否与请求的域名匹配有效期检查确认证书未过期且未吊销在Linux系统中Python默认使用系统的CA证书存储通常位于/etc/ssl/certs/ca-certificates.crt。如果这个文件缺失或证书不全就会导致验证失败。3. 问题诊断与解决方案3.1 快速验证证书问题首先通过OpenSSL工具诊断证书链openssl s_client -connect mirrors.aliyun.com:443 -showcerts如果输出中包含Verify return code: 0 (ok)表示证书验证正常否则会显示具体错误码。3.2 解决方案一更新系统CA证书推荐对于Ubuntu/Debian系统sudo apt update sudo apt install --reinstall ca-certificates sudo update-ca-certificates --fresh export SSL_CERT_DIR/etc/ssl/certs对于CentOS/RHEL系统sudo yum update ca-certificates sudo update-ca-trust force-enable sudo update-ca-trust extract3.3 解决方案二临时跳过SSL验证仅限测试环境修改deploy.py脚本在requests请求中添加verifyFalse参数import requests requests.get(url, verifyFalse)或者在执行命令时添加环境变量PYTHONHTTPSVERIFY0 python3 deploy.py installAll警告此方法会禁用SSL证书验证存在中间人攻击风险生产环境严禁使用3.4 解决方案三手动指定证书路径如果知道证书路径可以显式配置import os os.environ[REQUESTS_CA_BUNDLE] /path/to/certfile.pem或者修改Python的默认证书路径import ssl ssl._create_default_https_context ssl._create_unverified_context4. WeBASE部署中的特殊注意事项在WeBASE的具体部署场景中还需要注意以下细节依赖镜像源配置 检查deploy.py中是否配置了正确的镜像源。推荐使用阿里云镜像pip_mirror https://mirrors.aliyun.com/pypi/simple/Python版本兼容性 WeBASE推荐使用Python 3.6-3.8版本。可以通过以下命令检查python3 -c import ssl; print(ssl.OPENSSL_VERSION)确保OpenSSL版本不低于1.1.1代理环境处理 如果处在企业代理环境下需要配置代理证书sudo cp proxy_cert.pem /usr/local/share/ca-certificates/ sudo update-ca-certificates5. 深入排查证书问题的专业方法当标准解决方案无效时可以采用更专业的排查手段5.1 使用certifi获取最新证书import certifi print(certifi.where()) # 显示Python使用的证书路径可以通过更新certifi包获取最新CA证书pip install --upgrade certifi5.2 手动添加缺失证书从浏览器导出缺失的证书PEM格式追加到证书文件cat new_cert.pem $(python -m certifi)5.3 调试SSL握手过程设置环境变量查看详细握手过程export DEBUG1 export SSLKEYLOGFILE~/sslkey.log wireshark # 配合Wireshark分析SSL流量6. 企业级部署的最佳实践对于需要批量部署的生产环境建议采用以下方案构建本地镜像源# 使用apt-mirror或createrepo创建本地仓库 sudo apt install apt-mirror echo deb https://mirrors.aliyun.com/ubuntu/ focal main /etc/apt/mirror.list sudo apt-mirror制作自定义Docker镜像FROM ubuntu:20.04 RUN apt update apt install -y ca-certificates COPY custom-certs/* /usr/local/share/ca-certificates/ RUN update-ca-certificates使用Ansible批量配置- name: Ensure CA certificates apt: name: ca-certificates state: latest register: cert_result - name: Update CA certificates command: update-ca-certificates --fresh when: cert_result.changed经过上述步骤处理后再次运行python3 deploy.py installAll应该能顺利完成WeBASE的安装。这个问题的本质是系统安全机制与网络环境的适配问题理解其背后的原理后在不同环境中都能游刃有余地解决类似问题