我有一个运行两台服务器的Java / Restlet应用程序。一个在指定端口(以下称为“UI服务器”),一个在运行时随机选择的端口(以下称为“文件服务器”),两者都在同一主机上。
假设此应用程序在本地运行,并且在受到保护时,将使用自签名证书完成。文件服务器具有CORS头,UI服务器通过jQuery AJAX向它发出HTTP Get请求。
如果应用程序使用SSL保护,我使用相同的密钥库和密码保护两台服务器。但是,此时我无法再从UI服务器向文件服务器发出jQuery AJAX Get请求。原因是,虽然用户告诉他们的浏览器在UI服务器中为自签名证书做出例外,但他们没有(实际上也没有)为文件服务器这样做,因为它有一个随机的港口。因此请求不会进入文件服务器。
基本上我理解现代浏览器会阻止我向具有无效SSL证书的服务器发出AJAX请求,但我正在创建两个服务器,并且他们使用相同的证书,我只需要说服浏览器让我提出此请求
答案 0 :(得分:0)
因此请求不会进入文件服务器
我认为确实如此,但您的浏览器不喜欢文件服务器返回的证书。由于您声称对UI和文件服务器使用相同的证书,并且您的浏览器正在接受自签名证书,因此很可能问题是返回的证书的公用名(CN)。如果文件服务器的URL与您的浏览器不喜欢的证书的CN不同,但是因为您正在进行“后台”AJAX调用,您可能看不到错误而且它只是失败。
答案 1 :(得分:0)
我认为您的问题是,当您选择手动信任时,浏览器会将域名与证书相关联。
当从文件服务器(localhost)加载证书时,因为它具有与远程服务器不同的域名,浏览器无法识别已授予它的信任。
可能的解决方案包括: