【发布时间】:2015-10-17 17:35:42
【问题描述】:
我一直在使用 Javascript 前端和 Java 后端测试 Websockets 的功能。我已经设法在使用标准 HTTP/WS 协议的客户端和服务器之间进行通信,但希望启用 HTTPS 来为前端(网站)提供服务,然后使用 WSS 连接到服务器 Java 端点。
到目前为止,我已经使用自签名证书通过 HTTPS/TLS 设置了网站,并且能够使用 HTTPS 协议导航到该网站:“https://domain-name.chat”。
现在我认为在建立新的 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" />
【问题讨论】:
-
您是否在 websocket 服务器端进行了适当的更改? IE。设置证书,tls?
-
@Andrey 是的,我设置了 ssl 并生成了一个自签名证书,并使用证书和密钥等启用了虚拟主机 SSLEngine。TLS 是否与 SSL 分开?
-
Tls 与 ssl 是分开的,但这与问题无关,因为 https 可以使用这两种协议进行加密。我也看到你在使用 apache,你能提供 websocket 相关的配置,所以我们可以诊断出什么问题吗?可能是this 问题会有帮助吗?
-
我没有尝试重新配置我的服务器,以专门针对 Websockets,只是为了让 SSL 虚拟主机允许使用 https 访问网站,我认为 wss 可以正常工作。
标签: javascript java ssl https websocket