Docker+Django-Cookiecutter本地HTTPS环境NGINX证书加载错误排查
使用Docker和Django-Cookiecutter搭建本地HTTPS开发环境,严格按文档用mkcert生成证书,需额外配置NGINX才能让.pem文件生效,但配置后NGINX抛出以下错误:
nginx.1 | 2023/05/24 20:56:23 [error] 37#37: *1 cannot load certificate "data:": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE) while SSL handshaking, client: 172.19.0.1, server: 0.0.0.0:443 nginx.1 | 2023/05/24 20:56:23 [error] 42#42: *2 cannot load certificate "data:": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE) while SSL handshaking, client: 172.19.0.1, server: 0.0.0.0:443 nginx.1 | 2023/05/24 20:56:23 [error] 40#40: *3 cannot load certificate "data:": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE) while SSL handshaking, client: 172.19.0.1, server: 0.0.0.0:443 nginx.1 | 2023/05/24 20:56:23 [error] 39#39: *4 cannot load certificate "data:": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE) while SSL handshaking, client: 172.19.0.1, server: 0.0.0.0:443
已尝试以下排查操作,但问题未解决:
- 重新生成证书/密钥
- 重装mkcert
- 重建Docker Compose
- 修改NGINX配置
- 从零创建项目
项目相关配置及验证信息
nginx.conf(当前配置)
server { listen 80; server_name localhost; location / { return 301 https://$host$request_uri; } } server { listen 443 ssl; server_name localhost; ssl_certificate /etc/nginx/certs/localhost.pem; ssl_certificate_key /etc/nginx/certs/localhost-key.pem; location / { proxy_pass http://django:8000; # name of django docker container proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
注:添加该配置是因为NGINX无法自动识别mkcert生成的.pem文件。*
docker-compose.yml(NGINX部分)
nginx: build: context: . dockerfile: ./compose/local/nginx/Dockerfile container_name: local_nginx ports: - "80:80" - "443:443" volumes: - /var/run/docker.sock:/tmp/docker.sock:ro - ./certs:/etc/nginx/certs depends_on: - django
注:django是我的Django应用,可正常访问localhost:8000,也能从NGINX容器中curl访问。
./compose/local/nginx/Dockerfile
FROM jwilder/nginx-proxy:latest RUN rm /etc/nginx/conf.d/default.conf COPY ./compose/local/nginx/nginx.conf /etc/nginx/conf.d
注:添加该配置是因为NGINX无法自动识别mkcert生成的.pem文件。*
证书验证结果
openssl x509 -text -noout -in localhost.pem验证结果
Certificate: Data: Version: 3 (0x2) Serial Number: 99:0c:b3:f7:2a:8b:f9:f7:0f:90:69:8f:63:4c:2a:7f Signature Algorithm: sha256WithRSAEncryption Issuer: O = mkcert development CA, OU = dakotahorstman@dur10469-ubuntu (Dakota Horstman), CN = mkcert dakotahorstman@dur10469-ubuntu (Dakota Horstman) Validity Not Before: May 24 20:52:44 2023 GMT Not After : Aug 24 20:52:44 2025 GMT Subject: O = mkcert development certificate, OU = dakotahorstman@dur10469-ubuntu (Dakota Horstman) Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) Modulus: 00:e7:d7:17:b3:a9:0e:a1:b0:57:68:32:06:71:7a: c8:e1:c0:ec:1a:eb:8c:08:bd:12:ea:39:94:f9:8e: 12:85:45:7b:4a:e2:2b:80:17:b2:7d:b1:4b:75:1c: da:42:3d:e3:0a:9e:8d:ca:61:c5:f1:fd:26:86:d4: 4e:79:c3:0e:7f:f5:ab:76:44:ac:12:16:0b:36:56: 7a:be:be:31:e3:68:cc:47:4e:18:75:4f:36:da:d1: d6:50:a7:83:7d:4f:fe:60:c1:15:64:71:c4:a9:4d: b1:74:d5:c5:51:20:9e:38:39:24:46:5b:6c:45:c3: 8e:71:e2:5b:e7:92:f6:0e:42:34:33:f4:e6:36:22: c0:e2:fd:05:26:75:51:4a:13:23:a1:21:11:b1:88: 14:80:7a:56:70:81:aa:34:97:42:e7:cb:be:7d:e4: 69:cc:a9:e5:ec:42:2e:0b:6c:a9:d1:57:d8:5b:70: 9c:55:46:d0:bc:01:06:97:a2:15:e3:22:0c:32:67: f0:99:64:a3:6f:41:33:da:ca:a4:c6:d7:09:a8:a8: 2c:26:45:88:09:e6:9f:4b:88:12:ca:de:6a:96:49: 29:49:c4:e0:45:f0:35:e9:de:c8:9b:c7:30:de:8a: e0:fa:9b:fb:6e:e9:ee:60:78:06:7a:16:e7:6c:6a: 13:c3 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Digital Signature, Key Encipherment X509v3 Extended Key Usage: TLS Web Server Authentication X509v3 Authority Key Identifier: keyid:AB:28:4B:C0:36:99:06:7A:D5:FF:CA:EC:83:C6:1D:F3:B6:85:3F:17 X509v3 Subject Alternative Name: DNS:localhost, IP Address:127.0.0.1 Signature Algorithm: sha256WithRSAEncryption a5:12:82:ec:25:0b:e5:b5:99:dc:a6:60:a1:5c:f8:03:19:70: 41:10:0d:b8:04:ac:c8:be:7a:d5:b1:23:ce:db:06:0d:1e:98: 31:01:09:f4:00:5d:25:04:00:6c:c2:da:56:3b:f4:f4:5e:88: 4a:26:61:12:9c:34:74:22:b6:27:82:f9:39:35:cd:94:e1:c9: a4:60:20:f1:d9:87:cb:4e:38:7b:9a:70:7d:82:48:7b:3c:ca: 38:e9:e7:e4:c0:89:73:a0:26:34:61:4d:12:90:f2:3a:ba:dd: 49:3b:cd:75:cb:0d:84:63:0e:4c:09:fe:b6:3b:5e:ea:2d:1d: a4:04:63:9e:d4:e3:a8:d7:ee:ed:aa:90:9f:bc:26:fe:e3:49: 34:54:4d:82:a6:d2:c2:0c:ca:89:fd:b1:5b:62:4b:f0:c5:cb: 21:09:96:c4:55:88:17:7a:cb:53:ae:e8:83:18:a3:14:1c:87: 2d:7d:72:34:17:04:55:c6:cc:99:5a:92:88:fc:06:bf:08:6b: b5:49:60:44:03:44:6b:7f:bc:7e:a1:b9:ec:aa:ef:e1:88:47: 3d:76:f0:c2:04:53:d0:57:32:f1:a5:5d:ac:53:e6:e8:a4:a4: 7f:2e:5b:bd:cd:d2:3c:c9:9f:ec:32:36:11:c1:b9:ba:a5:2f: 17:93:69:7e:bf:47:ae:74:2a:40:de:48:7f:f8:96:ce:de:72: 1d:28:27:64:7e:eb:e7:c4:44:77:01:82:6e:93:a2:a8:d3:89: e7:8b:0a:6f:c5:a5:23:a1:a4:82:59:2f:63:6a:12:c6:50:80: 88:11:fb:38:e9:36:45:10:b9:6c:ba:c3:df:76:5e:fb:3d:c4: 05:67:62:45:3b:21:be:7b:5b:ee:e9:9c:4e:02:fd:03:5d:95: 6f:de:8e:e2:eb:93:b3:cb:90:ff:06:97:a3:1b:2a:5a:34:b3: 4d:de:ed:2e:01:ae:fc:88:9d:bf:37:98:78:40:56:a5:c9:98: ad:45:e8:85:7d:19
openssl rsa -in localhost-key.pem -check验证结果
RSA key ok writing RSA key -----BEGIN RSA PRIVATE KEY----- ... -----END RSA PRIVATE KEY-----
Chrome浏览器访问时显示ERR_SSL_PROTOCOL_ERROR错误。
内容的提问来源于stack exchange,提问作者Dakota Horstman
相关产品推荐
相关产品推荐

