【问题标题】:Difficulties configuring nginx for Https为 Https 配置 nginx 的难点
【发布时间】:2018-03-30 07:44:34
【问题描述】:

我目前正在我的家庭网络上配置两个 rapsberry pi。一个将来自节点服务器上的传感器的数据提供给第二个 pi(一个网络服务器,也在节点上运行)。它们都位于 nginx 代理后面。经过大量配置和搜索,我找到了一个可行的解决方案。网络服务器正在使用 dataplicity 使其可访问 www。我不在第二个 pi(sensordata 的服务器)上使用 dataplicity:

server {
  listen 80;
  server:name *ip-address*

  location / {
      proxy_set_header X-forwarded-For $remote_addr;
      proxy_set_header Host $http_host;
      proxy_pass "http://127.0.0.1:3000";
  }
 }

server {
 listen 443 ssl;
 server_name *ip-address*

 ssl on;
 ssl_certificate /var/www/cert.pem
 ssl_certificate_key /var/www/key.pem
 location /{
    add_header "Access-control-allow-origin" *;
    proxy_pass http://127.0.0.1:3000;
 }
}

此配置有效。但是,仅在我的计算机上。在尝试使用 ajax-request 访问 api 时,我从其他计算机得到 ERR_INSECURE_RESPONSE。证书是自签名的。帮助非常有用。

编辑: 仍然没有解决这个问题。我也为我的第二台设备注册了 dataplicity。这解决了我的问题,但它现在通过第三方运行。将来会对此进行研究。所以如果有人对此有答案,请告诉。

【问题讨论】:

    标签: node.js ssl nginx


    【解决方案1】:

    您的证书似乎不正确,缺少根证书? (如果您已经在浏览器上接受了不安全的证书,它可以在您的计算机上运行)。

    检查您的证书是否良好,以下命令必须给出相同的结果:

    openssl x509 -noout -modulus -in mycert.crt | openssl md5
    openssl rsa -noout -modulus -in mycert.key | openssl md5
    openssl x509 -noout -modulus -in mycert.pem | openssl md5
    

    如果一个输出与另一个不同,则证书生成错误。

    您也可以使用 curl 直接在计算机上检查它: curl -v -i https://yourwebsite

    如果输出顶部显示不安全警告,则证书生成错误。

    【讨论】:

    • 我只有两个证书。 cert.pem 和 key.pem。它们都使用您的命令给出相同的结果
    • 重建 URL 到:192.***.*.***/ * 在 DNS 缓存中找不到主机名 * 正在尝试 192.***.*.***... * 连接到 192.168.1.106 (192.***.*.***) 端口 443 (#0) * 成功设置证书验证位置:* CAfile:无 CApath:/etc/ssl/certs * SSLv3,TLS 握手,客户端问候(1):* SSLv3、TLS 握手、服务器问候(2):* SSLv3、TLS 握手、CERT(11):* SSLv3、TLS 警报、服务器问候(2):* SSL 证书问题:自签名证书 *关闭连接 0 * SSLv3,TLS 警报,客户端问候 (1): curl: (60) SSL 证书问题:自签名证书
    • 好吧,好像没有证书链问题。 2 种解决方案,好的是将您的证书添加到客户端的信任库中(请参阅顶部的帖子),如果正确完成 curl 将停止给您失败。或者不好的是,在您的节点客户端应用程序中,只需在您的所有 http 请求选项中添加这个 '"rejectUnauthorized": false' :request.post({uri: "https://..", rejectUnauthorized: false, ... })
    【解决方案2】:

    上面的帖子看起来很正确。

    证书和/或 SSL 被您的客户端拒绝。

    这可能是一些事情,假设证书本身是公开签名的(它们可能不是)。

    日期和时间可能不匹配(证书对系统时钟敏感)。

    如果您的证书是自签名的,您需要确保您的远程设备配置为接受您的私有根证书。

    最后,您可能需要将服务器配置为仅使用现代加密方法。如果自 POODLE 攻击以来已更新,您的客户可能会拒绝一些旧方法。

    这篇文章应该让你创建一个证书https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-nginx-in-ubuntu-16-04,尽管我认为你已经做到了这一点。

    这篇帖子https://unix.stackexchange.com/questions/90450/adding-a-self-signed-certificate-to-the-trusted-list 将让您将新的私有根证书添加到客户端的受信任列表中。

    最后这是 Ubuntu 中推荐的 SSL 配置(来自这里 https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-on-ubuntu-14-04)。

        listen 443 ssl;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
        ssl_prefer_server_ciphers on;
        ssl_dhparam /etc/nginx/ssl/dhparam.pem;
        ssl_certificate /etc/nginx/ssl/nginx.crt;
        ssl_certificate_key /etc/nginx/ssl/nginx.key;
    

    或者,如果您真的卡住了,请私信我您的帐户详细信息,我会为您的 Dataplicity 帐户添加第二台免费设备:)

    【讨论】:

    • 感谢您的精彩回答!将调查您提供的来源。不认为有可能在这里 PM 吗?如果我再次被卡住,我会给出一个新的评论,我们可以从那里得到它。
    • 运气不好。我如何联系您以设置第二个 dataplicity?
    • 好的,为您添加了另一台设备 - 很高兴为您提供帮助 :-) 如果我能提供任何进一步的帮助,请告诉我...
    【解决方案3】:

    很酷的项目,乐于助人。

    Dataplicity Wormhole 将侦听设备端口 80 的服务重定向到 https://*.dataplicity.io 形式的公共 URL,并在前面放置一个 dataplicity 证书。由于 HTTPS 的工作方式,通过 dataplicity 重定向的端口不能使用 HTTPS,因为这意味着我们无法通过 dataplicity.io 域转发流量。无论如何,从您的设备到 Dataplicity 的隧道都是加密的。

    您是否有理由不想在第二个 Pi 上运行 Dataplicity?虽然您当然可以在本地运行网络服务器,但如果您只是在第二台设备上安装了第二个 Dataplicity 实例,这将更容易且更便于跨网络移植...

    【讨论】:

    • 只是我觉得我不需要。它只是用来向我的 webserv 提供数据。所以我更愿意为我当前的设置找到一个解决方案。如果可能的话?
    • 如果我没有找到解决方案,但我很可能会设置第二个 dataplicity
    猜你喜欢
    • 2014-05-16
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 2016-08-23
    相关资源
    最近更新 更多