为Https配置nginx的困难

时间:2017-07-28 16:23:21

标签: node.js ssl nginx

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

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。证书是自签名的。帮助很多。

编辑: 仍然无法解决这个问题。我也为我的第二台设备注册了数据安全性。这解决了我的问题,但它现在通过第三方运行。将来会考虑这个。所以,如果有人对此有答案,请告诉我们。

3 个答案:

答案 0 :(得分:1)

酷项目,热心帮忙。

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

您是否有理由不在第二个Pi上运行Dataplicity?虽然你当然可以在本地运行一个网络服务器,但如果你刚刚在你的第二台设备上安装了第二个Dataplicity实例,那么这将更容易,更便携。[/ p>

答案 1 :(得分: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

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

答案 2 :(得分:1)

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

您的客户拒绝了证书和/或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帐户上放置第二个免费设备:)