使用Ajax

时间:2017-08-29 23:02:26

标签: node.js ajax ssl localhost

我正在开发一个NodeJS应用程序,该应用程序在https://localhost:port上运行服务器并使用自签名证书(因为没有供应商为localhost提供证书)。我正在使用来自我网站的 AJAX 来调用locahost并将数据发送到NodeJs应用程序。由于预期的INSECURE_CONTENT,我的电话被阻止了。我想知道我们是否有任何解决方法?

4 个答案:

答案 0 :(得分:5)

见下面的更新

解决方法是在浏览器级别启用它。这也应该允许AJAX调用。

适用于Chrome

  1. 以chrome(chrome://flags/#allow-insecure-localhost
  2. 转到此网址
  3. enter image description here
  4. 点击启用。
  5. 然后您必须重新启动Chrome浏览器,以便更改可能会影响。
  6. 适用于Firefox

    1. 转到firefox中的本地主机。它应该显示警告。
    2. 点击高级
    3. 点击添加例外...
    4. 将出现新的弹出窗口,单击获取证书
    5. 确认该复选框显示“永久存储此例外'
    6. 点击'确认安全例外'。请参阅下面的图片

      • enter image description here
      • enter image description here
    7. UPDATE:

      根据op的评论,更新的答案如下:

      Reply to this comment)对于这个简单的黑客攻击是在你的节点应用程序中有一个proxy路由。创建http://localhost/proxy?yourwebsites_api/getData之类的路线。在节点服务器代理路由中,将从您的URL获取GET参数并点击您的网站服务器。并将返回相同的回复。与c# HttpWebRequestHttpClientPHP 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\hostsARKit

以下是将证书添加到根证书存储区的方法:

OSX:
https://pubs.vmware.com/flex-1/index.jsp?topic=%2Fcom.vmware.horizon.flex.admin.doc%2FGUID-9201A917-D476-40EF-B1F4-BBF14AB83D94.html

视窗:
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>