【问题标题】:Setup (https) SSL on localhost for meteor development在 localhost 上设置 (https) SSL 以进行流星开发
【发布时间】:2015-01-15 12:42:53
【问题描述】:

如何创建自签名 SSL 证书以在 mac 10.9 上的本地服务器上使用?

我需要我的本地主机作为https://localhost

我正在使用linkedin API。这里解释了需要本地主机上的 ssl 的功能。 https://developer.linkedin.com/documents/exchange-jsapi-tokens-rest-api-oauth-tokens

简而言之,在客户端授权我的应用访问他们的数据后,linkedin 将向客户端发送一个不记名令牌。 linkedin 内置的 javascript 库会自动将此 cookie 发送到我的服务器/后端。此 json 文件信息用于用户身份验证。

但是,如果服务器不是 https,linkedin 不会发送私有 cookie。

【问题讨论】:

  • 你能解释一下你为什么需要这个吗?我不确定如何从加密到本地机器的流量中受益......从他们的本地机器
  • 我已经详细说明了。我也有一个指向亚马逊免费套餐服务器的域名。我用 mup 包部署了它。是我在amazon服务器上开发值得考虑还是amazon服务和我的localhost服务的原理是一样的。即,本地主机和另一台服务器之间没有重大的重新配置
  • 我认为这可能对你有用gist.github.com/micho/1712812 还有一篇文章的链接,介绍如何在 gist 的 cmets 中设置自签名 ssl。

标签: node.js ssl cookies meteor ssl-certificate


【解决方案1】:

其他解决方案是使用 NGINX。以下步骤在 Mac El Capitan 上进行了测试,假设您的本地网站在端口 3000 上运行:

1.将主机添加到本地计算机:

编辑您的主机文件:vi /etc/hosts

为您的本地开发域添加一行:127.0.0.1 dev.yourdomain.com

刷新缓存dscacheutil -flushcache

现在您应该可以通过http://dev.yourdomain.com:3000 访问您的本地网站

2。创建一个自签名 SSL,如下所述:http://mac-blog.org.ua/self-signed-ssl-for-nginx/

3.安装 nginx 并配置它 将 https 流量映射到您的本地网站:

brew install nginx

sudo nginx

现在您应该可以联系http://localhost:8080 并收到一条 Nginx 消息。

这是默认配置,所以现在您必须设置 https 配置:

编辑你的 conf 文件:

vi /usr/local/etc/nginx/nginx.conf

取消注释 HTTPS 服务器部分并更改以下行:

server_name dev.yourdomain.com;

把你刚刚创建的证书放进去:

ssl_certificate /path-to-your-keys/nginx.pem;

ssl_certificate_key /path-to-your-keys/nginx.key;

用这个改变位置部分:

location / {
          proxy_pass          http://localhost:3000;
          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-Client-Verify  SUCCESS;
          proxy_set_header    X-Client-DN      $ssl_client_s_dn;
          proxy_set_header    X-SSL-Subject    $ssl_client_s_dn;
          proxy_set_header    X-SSL-Issuer     $ssl_client_i_dn;
          proxy_read_timeout 1800;
          proxy_connect_timeout 1800;
        }

重启nginx:

 sudo nginx -s stop
 sudo nginx 

现在你应该可以访问https://dev.yourdomain.com

【讨论】:

  • 过去我对此感到头疼,这个答案无需修改即可立即生效。谢谢!
【解决方案2】:

在开发/生产模式下工作的快速简单的解决方案,在您的应用顶部使用 http-proxy

1) 添加tarang:ssl

meteor add tarang:ssl

2) 将您的证书和密钥添加到应用中的目录/private,例如/private/key.pem/private/cert.pem

然后在你的 /server 代码中

Meteor.startup(function() {
    SSLProxy({
       port: 6000, //or 443 (normal port/requires sudo)
       ssl : {
            key: Assets.getText("key.pem"),
            cert: Assets.getText("cert.pem"),

            //Optional CA
            //Assets.getText("ca.pem")
       }
    });
});

然后启动您的应用程序并加载https://localhost:6000。确保不要将您的端口与 https 和 http 混淆,因为它们是分开提供的。

有了这个,我假设您知道如何创建自己的自签名证书,关于如何执行此操作的资源很多。以防万一这里有一些链接。

自签名证书的替代方案:最好为您的应用程序域使用官方证书并使用 /etc/hosts to create a loopback on your local computer too。这是因为必须在 dev 和 prod 之间切换证书很乏味。

【讨论】:

  • 购买证书对我来说是有意义的,因为我将不得不在某些时候购买。我将建立亚马逊环境并在那里开发。我会回来参考您的答案和流星包,让您知道我的进展情况。感谢您提供详细的步骤。
  • 我已安装包并在终端中运行“sudo meteor --port localhost:443”,并且应用程序在 localhost:443 上完美运行我现在已成功收到 JavaScript API 不记名令牌。很棒的包裹!
  • 问题。什么是 ca:Assets.getText("ca.pem") 包含链(捆绑)证书的正确语法?谢谢阿克沙特
  • 仅供参考,端口 6000 会导致 Chrome 中出现“ERR_UNSAFE_PORT”错误(在 FF 中也不起作用),所以我尝试了端口 3100 并且成功了!
  • 对我不起作用。使用meteor 命令启动应用程序,当我通过netstat 检查时,应用程序从localhost:3000'. couldn't connect at 'https://localhost:6000'. although it shows port 6000 开始正在监听node。有没有人遇到过类似的问题?
【解决方案3】:

或者您可以使用ngrok 进行端口转发:)

1) 启动您的服务器(即在 localhost:3000)

2) 从命令行启动 ngrok:./ngrok http 3000

这应该让您可以从任何设备访问 http 和 https 网址

【讨论】:

  • 不适用于我的所有工作流程。但是对于简单的用例来说很方便。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-27
  • 2021-07-12
  • 2020-07-24
相关资源
最近更新 更多