带有nodejs的Google Compute Engine上的SSL

时间:2015-11-06 12:47:57

标签: node.js ssl https google-compute-engine google-cloud-platform

要点:

我尝试在Google的计算引擎( GCE )上设置Node.js服务器以使用HTTPS,但远程服务器没有&#39 ; t似乎在通过https://...访问时作出回应。

到目前为止我尝试了什么:

我已从Comodo获得了证书,将其放在后端,将其包含在代码中,并按如下方式创建了HTTPS服务器:

var app = express();
var https = require('https');
var fs = require('fs');

var options = {
  key: fs.readFileSync('server.key'),
  cert: fs.readFileSync('server.crt'),
};

...
        https.createServer(options,app).listen('443',function(){
                console.log('https ready')
        });

我还添加了以下防火墙规则:

gcloud compute firewall-rules create allow-https --description "https server" --allow tcp:443
--format json

当我在本地计算机上运行服务器并尝试通过Chrome使用https://localhost:443访问它时,我得到了预期的结果:

  

此服务器无法证明它是localhost;其安全证书来自www.domain_name.com。这可能是由于配置错误或攻击者拦截您的连接造成的。

表示服务器已正确配置为能够识别https请求,但由于证书不属于localhost,因此会发出警告。

问题:

当我在与证书关联的域名上运行的GCE实例上运行相同的代码时,我得不到服务器的响应。此外,根据tcpdump在正确的端口上传入https流量:

tcpdump output for my case

我使用以下结果运行netstat -ltnp

  • 当我运行上面显示https配置的服务器时,没有443端口的记录。

  • 当我在端口8080上运行http配置的服务器时,该端口有一条记录,一切正常。

  • 当我使用http AND https配置(侦听端口8080和端口443)运行服务器时,两者都没有记录,并且根本没有来自服务器的响应......

我的问题是:如何让我的GCE实例回复https个请求?我还应该做什么或测试什么?

我在这个主题上发现了几个问题(q1q2q3q4),似乎我做了那里推荐的所有问题,但我的问题仍然存在。

1 个答案:

答案 0 :(得分:2)

可能您是以非root用户身份运行服务器,但无法绑定到端口443(这是一个特权端口)。