我正在使用Angular 2,Node.js和socket.io开发一个Web应用程序。它与http工作完全正常,但是我想实现https协议,我就碰壁了。
我在从angular到我的web api的任何http调用中获取net :: ERR_INSECURE_RESPONSE,并且在尝试建立套接字连接时也是如此。
这是我做的:
1)生成我的私钥和csr。
2)使用该csr从Comodo请求SSL证书。
3)从Comodo收到2个文件: - domain.ca-bundle - domain.crt
4)我将这两个文件和我的私钥复制到一个文件夹中:/ etc / apache2 / ssl /
5)我修改了etc / apache2 / sites-available中的default-ssl.conf以指向这些文件:
SSLCertificateFile /etc/apache2/ssl/domain.crt
SSLCertificateKeyFile /etc/apache2/ssl/mypriv.key
SSLCertificateChainFile /etc/apache2/ssl/domain.ca-bundle
加上:
ServerName domain.io
ServerAlias www.domain.io
6)启用https并重启apache。如果我的证书设置正确,则使用SSL分析器(https://sslanalyzer.comodoca.com/)进行验证。它确认与我的网站的连接现在是安全的,所以我认为这部分已经正确完成,现在我需要修复应用程序和服务器来处理https。
7)这是以角度创建套接字连接的方式:
this.socket = io.connect('https://server_ip' + ':3000', {
rejectUnauthorized:false});
稍后会在
上给我net :: ERR_INSECURE_RESPONSE8)Angular app也向服务器发出http请求,如下所示:
var headers = new Headers();
headers.append('Content-Type', 'application/json');
let options = new RequestOptions({ headers: headers });
return this.http.post('https://server_ip' + ':3000/register',
JSON.stringify(userModel), options)
.map(res => res.json())
这也会给我net :: ERR_INSECURE_RESPONSE(响应OPTIONS调用)
9)现在在服务器端,这是相关的代码:
var https = require('https');
var options = {
ca: splitca('/etc/apache2/ssl/domain.ca-bundle'),
key: fs.readFileSync('/etc/apache2/ssl/mypriv.key'),
cert: fs.readFileSync('/etc/apache2/ssl/domain.crt')
};
var server = https.createServer(options, app);
let io = require('socket.io')(https);
server.listen(3000, () => {
logger.debug('server started on port');
})
服务器启动正常,但来自angular的任何调用都会导致net :: ERR_INSECURE_RESPONSE响应(尝试使用chrome,mozilla和IE)。服务器和角度应用程序都运行在同一个IP上。
知道我在这里做错了什么吗?谢谢!