Flask应用部署SSL证书遇OpenSSL版本号错误问题排查
SSL部署错误排查:OpenSSL版本号错误问题
针对你遇到的OpenSSL: error:0A00010B:SSL routines::wrong version number错误,本质是客户端发起SSL握手请求,但服务器返回的是HTTP协议数据而非SSL协议响应,以下是核心排查方向:
1. 容器端口映射错误
检查docker-compose-do.yml中的端口映射配置:
- 确认443端口是否映射到容器内的SSL服务端口(通常是443),而非HTTP的80端口。错误示例:
ports: - "443:80" # 错误:把443转发到容器的HTTP服务 - 正确配置应为:
ports: - "443:443" - "80:80" # 可选,用于HTTP跳转HTTPS - 执行
ss -tulpn | grep :443查看宿主机443端口的监听进程,确认是Docker容器在监听,而非其他进程。
2. 容器内Web服务未启用SSL配置
检查容器内Web服务(如Nginx、Apache)的配置文件:
- 确认配置中存在443端口的SSL监听块,且指定了正确的证书路径:
以Nginx为例,正确配置片段:server { listen 443 ssl; server_name toxiverse.com www.toxiverse.com; ssl_certificate /path/to/fullchain.pem; # 容器内的证书路径 ssl_certificate_key /path/to/privkey.pem; # 其他SSL相关配置(协议、加密套件等) ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; } - 确认容器内的证书路径与你挂载/复制的路径一致,比如你把证书放在宿主机
/root/ssl,需确保docker-compose的volumes配置将其映射到容器内的对应目录:volumes: - /root/ssl/fullchain.pem:/usr/share/nginx/certs/fullchain.pem - /root/ssl/privkey.pem:/usr/share/nginx/certs/privkey.pem
3. 证书文件权限问题
Web服务进程(如Nginx的nginx用户、Apache的www-data用户)需要读取证书文件的权限:
- 在宿主机执行
chmod 644 /root/ssl/*.pem,确保证书文件权限为可读。 - 进入容器执行
ls -l /path/to/certs/,确认证书文件的所有者和权限允许Web服务进程读取。
4. 证书文件有效性验证
虽然证书已成功申请,但需确认容器内使用的证书是有效的:
- 在宿主机执行以下命令检查证书内容:
确认证书的openssl x509 -in /etc/letsencrypt/live/toxiverse.com/fullchain.pem -text -nooutSubject Alternative Name包含toxiverse.com和www.toxiverse.com,有效期正确。 - 进入容器,对容器内的证书文件执行同样命令,确认与宿主机的证书一致。
5. 容器服务重启验证
修改配置或证书后,需确保容器完全重启:
- 执行
sudo docker compose -f docker-compose-do.yml down彻底停止容器,再执行up -d --build重新构建启动,避免配置未生效。
内容的提问来源于stack exchange,提问作者AnthonyTuzhu
相关产品推荐
相关产品推荐

