我正在开发一个NodeJS应用程序,该应用程序在https://localhost:port
上运行服务器并使用自签名证书(因为没有供应商为localhost提供证书)。我正在使用来自我网站的 AJAX 来调用locahost并将数据发送到NodeJs应用程序。由于预期的INSECURE_CONTENT,我的电话被阻止了。我想知道我们是否有任何解决方法?
答案 0 :(得分:5)
(见下面的更新)
解决方法是在浏览器级别启用它。这也应该允许AJAX调用。
点击'确认安全例外'。请参阅下面的图片
根据op的评论,更新的答案如下:
(Reply to this comment)对于这个简单的黑客攻击是在你的节点应用程序中有一个proxy
路由。创建http://localhost/proxy?yourwebsites_api/getData
之类的路线。在节点服务器代理路由中,将从您的URL获取GET
参数并点击您的网站服务器。并将返回相同的回复。与c#
HttpWebRequest或HttpClient或PHP
curl一样。
答案 1 :(得分:3)
将local.host 127.0.0.1
的条目添加到本地hosts文件,将local.host域指向127.0.0.1(仅在该计算机上)
然后,您可以为local.host
创建自签名证书,确保将其与您的nodejs应用和一起使用,并将其添加到您计算机上的根证书存储区,这将使浏览器成为可能认可证书。
您需要local.host
条目,因为您的自签名证书需要格式良好的域名。
您可以创建自签名证书,如下所示:
openssl req -x509 -nodes -days 1000 -subj '/C=US/ST=CA/L=MV/CN=local.host' -newkey rsa:2048 -keyout local.host.key -out local.host.crt
在osx上,hosts文件位于/etc/hosts
上的c:\windows\system32\drivers\etc\hosts
上ARKit
以下是将证书添加到根证书存储区的方法:
视窗:
http://www.thewindowsclub.com/manage-trusted-root-certificates-windows
更新
Op指出OP应用程序将安装在消费者桌面上。您可能会为myapp.mydomain.com生成证书,并在需要证书后将其指向127.0.0.1。 这不需要您将证书添加到根存储区。但是,这仍然需要您使用应用程序发送私钥,这会损害所有用户的证书,更新证书也很痛苦。 这不是一个好的解决方案。
您可以在安装期间生成唯一证书并将其安装在根存储中。 这也会损害证书,但仅限于特定用户。这减少了攻击向量,因为它自己的证书只能保护用户,这实际上也是charlesproxy的工作方式。
答案 2 :(得分:0)
最简单的方法是获得一个ngrok帐户。 Ngrok使用wildcardcerts,因此您可以在本地计算机上运行服务器,但您的网址启动https:// mycompany .ngrok.io
除了更像真实的服务器(网址可以忽略端口)之外,ngrok控制面板还可以播放重播消息(例如,表单帖子会破坏服务器端;修复服务器端代码并从ngrok控件重新播放小组,所以你不必再填写表格)
如果您希望能够分享正在进行的工作,那么Ngrok也很棒。 ngrok创建的隧道向公众开放(除非您使用密码保护它们)您自己的域名每年60美元。 如果您想使用https://ba615d46.ngrok.io
等随机域,请免费使用答案 3 :(得分:0)
首先,您没有提供任何代码。它是Express应用程序吗?如果是这样,这可能有所帮助。
import express from 'express'
const app = express()
app.enable('trust proxy')
app.use((request, response, next) => {
if (this.request.headers['x-forwarded-proto'] !== 'https') {
return response.redirect(`https://${request.headers.host}${request.url}`)
}
return next()
})
const server = app.listen(process.env.port || 5000, function() {
console.log('Server running at http://0.0.0.0:' + server.address().port)
})
<div id="output"></div>
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
<script type="text/babel">
const getMessage = () => "Hello World";
document.getElementById('output').innerHTML = getMessage();
</script>