【发布时间】:2020-04-05 11:19:48
【问题描述】:
几周以来我一直在使用 Laradock 进行本地开发,最近需要使用 HTTPS 以便在集成社交登录时让 Google 回拨给我。
我使用 WSL2 在 Windows 上进行开发并对我的 hosts 文件进行了更改:
127.0.0.1 tinker-dev.com
任何正常的http 流量到tinker-dev.com 的路由都正确,我看到了我的应用程序,太棒了!
我做了一些阅读,发现我需要一个由权威机构签署的 SSL 证书,并在mkcert 上遇到困难,看起来它应该可以完成这项工作。安装完成后,我 cd 进入 nginx/ssl 文件夹,该文件夹通过 NGINX_SSL_PATH=./nginx/ssl/ .env var 挂载到 Laradocks nginx ssl 目录中,然后我运行 mkcert tinker-dev.com localhost 127.0.0.1 0.0.0.0 ::1 以生成可用于授权来自这些域的请求(这产生了两个文件:tinker-dev.com+4.pem 和 tinker-dev.com+4-key.pem
然后我修改了sites-available 中的default.conf 以利用这些证书:
# For https
listen 443 ssl;
listen [::]:443 ssl ipv6only=on;
ssl_certificate /etc/nginx/ssl/tinker-dev.com+4.pem;
ssl_certificate_key /etc/nginx/ssl/tinker-dev.com+4-key.pem;
还修改了 laradocks startup.sh 以删除在加载时自动生成 SSL 证书的块(如果未找到 default.crtis)
#if [ ! -f /etc/nginx/ssl/default.crt ]; then
# openssl genrsa -out "/etc/nginx/ssl/default.key" 2048
# openssl req -new -key "/etc/nginx/ssl/default.key" -out "/etc/nginx/ssl/default.csr" -subj "/CN=default/O=default/C=UK"
# openssl x509 -req -days 365 -in "/etc/nginx/ssl/default.csr" -signkey "/etc/nginx/ssl/default.key" -#out "/etc/nginx/ssl/default.crt"
#fi
然后我启动了我的容器,发现日志中没有错误,但是到 https://tinker-dev.com 的任何流量导致访问日志中没有记录流量(http 流量仍然使用域记录)...我也意识到我刚刚遇到任何https 流量的403 错误。
我运行 nginx -T 来检查加载了哪个配置,我可以看到它正在使用我的证书/密钥,如果我这样做 cat /etc/nginx/ssl/tinker-dev.com+4.pem 它会打印证书,所以我确定它们正在安装到容器(如果我抓住钥匙,结果相同)
我在这里做其他明显错误的事情吗?我不是一个 Devopsy 的人,这些东西对我来说都是比较新的。
【问题讨论】:
-
您是否通过浏览器访问tinker-dev.com?如果你使用 curl 怎么办?当您生成自签名证书时,发出请求的客户端必须信任该证书或证书应该被禁用(不推荐)
-
尝试运行
openssl s_client -connect tinker-dev.com -port 443 -debug,看看是否出示了证书或openssl s_client -connect tinker-dev.com:443 -debug -
@Yan 感谢您的建议。看来问题是由 Docker for windows 引起的。它使用由 VMWare 提供的自己的 CA,该 CA 未经签名或信任,在流量甚至进入 VM 之前被拒绝,因此没有流量被路由到 nginx(因此我在访问日志中什么都看不到)......我'我要去看看是否有办法更改该证书。
-
@Yan Docker 桌面证明很难找到它注册其 VMWare 证书的位置......可能会选择 ngrok 或其他东西作为本地反向代理
-
我并没有真正使用过 docker for windows 但你为什么认为 docker 会拦截网络流量?它应该只是将它传递给 nginx 容器。你要暴露端口吗?您是否看到超时错误或不受信任的证书错误?如果您可以发布 docker run 命令,那么使用会有所帮助。您是否在 VMware 虚拟机中使用 docker 运行 Windows?
标签: docker ssl nginx ssl-certificate laradock