无法通过TLS

时间:2015-07-27 13:39:56

标签: javascript java ssl https websocket

我一直在使用Javascript前端和Java后端测试Websockets的功能。我已经设法在客户端和服务器之间进行标准HTTP / WS协议之间的通信,但是希望启用HTTPS来提供前端(网站),然后使用WSS连接到服务器Java端点。

到目前为止,我已使用自签名证书使用HTTPS / TLS设置网站,并且我可以使用HTTPS协议导航到该网站:" https://domain-name.chat&# 34。

现在我认为只是在建立新的Websocket连接时将uri中的协议更改为WSS,所以我将uri更改为" wss://domain.name.chat / serverEndpoint"

现在,当我加载网页时,没有建立连接,因为它会触发Websocket.onclose()事件处理程序。

我知道代码没有任何问题,因为它以前使用的是HTTP / WS。

我是否正确理解Websockets没有跨域脚本阻止问题?

我在设置HTTPS / WSS的过程中错过了一步吗?

编辑:添加了网站域的虚拟主机信息

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin webmaster@localhost
    ServerName domain-name.chat
    ServerAlias www.domain-name.chatt

    DocumentRoot /usr/local/apache-tomcat-7.0.47/webapps/WebSocketChat/
    RewriteEngine on
    RewriteRule ^/(.*)$ /WebSocketChat/$1 [l,PT]
    JkMount /* worker2

    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/apache.crt
    SSLCertificateKeyFile /etc/apache2/ssl/apache.key

</VirtualHost>
</IfModule>

这是Tomcat7的server.xml中的连接器设置:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="250" scheme="https" secure="true"
               keystoreFile="${user.home}/.keystore" keystorePass="changeit"
               clientAuth="false" sslProtocol="TLS" />

1 个答案:

答案 0 :(得分:0)

由于您使用的是自签名证书,因此即使正确设置了所有内容,浏览器仍有可能拒绝连接。

例如,我的Safari浏览器将无法连接到我的自签名证书服务器(碘)。

我认为Safari会一直检查证书注册表而Chrome不会(如果您通过警告屏幕)...这是浏览器特定的。

Websocket协议规定,如果证书无效,浏览器应终止连接。

至于:

  

我是否理解Websockets没有跨域脚本阻塞问题?

这不是那么简单,并且有一个小的安全标头可以防止跨站点脚本。

虽然这一点上的安全性很容易规避,但浏览器会发送标题Origin来表明原始URL。当您尝试连接到不同URL上的Websocket时,服务器可能会拒绝该连接,除非它被设置为接受来自任何源的连接。

修改:评论带来的另一个想法是您的服务器可能未正确设置。您是直接连接到明文websocket服务器还是使用apache?对于代理Websockets的apache,需要进行一些调整(搜索mod_websocket)。