使用随机端口

时间:2015-04-29 19:09:05

标签: jquery ajax security ssl restlet

我有一个运行两台服务器的Java / Restlet应用程序。一个在指定端口(以下称为“UI服务器”),一个在运行时随机选择的端口(以下称为“文件服务器”),两者都在同一主机上。

假设此应用程序在本地运行,并且在受到保护时,将使用自签名证书完成。文件服务器具有CORS头,UI服务器通过jQuery AJAX向它发出HTTP Get请求。

如果应用程序使用SSL保护,我使用相同的密钥库和密码保护两台服务器。但是,此时我无法再从UI服务器向文件服务器发出jQuery AJAX Get请求。原因是,虽然用户告诉他们的浏览器在UI服务器中为自签名证书做出例外,但他们没有(实际上也没有)为文件服务器这样做,因为它有一个随机的港口。因此请求不会进入文件服务器。

基本上我理解现代浏览器会阻止我向具有无效SSL证书的服务器发出AJAX请求,但我正在创建两个服务器,并且他们使用相同的证书,我只需要说服浏览器让我提出此请求

2 个答案:

答案 0 :(得分:0)

  

因此请求不会进入文件服务器

我认为确实如此,但您的浏览器不喜欢文件服务器返回的证书。由于您声称对UI和文件服务器使用相同的证书,并且您的浏览器正在接受自签名证书,因此很可能问题是返回的证书的公用名(CN)。如果文件服务器的URL与您的浏览器不喜欢的证书的CN不同,但是因为您正在进行“后台”AJAX调用,您可能看不到错误而且它只是失败。

答案 1 :(得分:0)

我认为您的问题是,当您选择手动信任时,浏览器会将域名与证书相关联。

当从文件服务器(localhost)加载证书时,因为它具有与远程服务器不同的域名,浏览器无法识别已授予它的信任。

可能的解决方案包括:

  • 让用户首先浏览文件服务器并让他们信任证书。可能每次浏览器还将端口号与信任关联。
  • 购买由受信任的CA签署的“localhost”证书。
  • 创建您自己的CA并使用它来签署远程和本地服务器的证书。让用户将此根CA添加到其计算机上的受信任存储中(但是您可能会问很多,因为您可以使用此根CA签署任何域的证书)。