从Chrome 47开始,仅允许来自安全源(HTTPS或本地主机)的WebRTC。 查看其发行说明,了解有关此问题的进一步信息。
请记住,通过HTTPS提供应用程序时,如果使用websockets控制应用程序服务器,则强制使用WebSockets Secure(WSS)。
客户端应用安全
Java应用配置HTTPS
-
应用程序需要一个证书才能启用HTTPS:
从本地证书颁发机构请求证书。
创建自签名证书。
keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 360 -keysize 2048
-
在您的应用程序中使用证书:
在jar文件中包含有效的密钥库:
文件keystore.jks必须位于项目的根路径中,在src/main/resources/中包含名为application.properties的文件,并包含以下内容:
server.port: 8443 server.ssl.key-store: keystore.jks server.ssl.key-store-password: yourPassword server.ssl.keyStoreType: JKS server.ssl.keyAlias: yourKeyAlias
当启动基于Spring-Boot的应用程序的时候,您还可以指定属性文件的位置。
-Dspring.config.location=<path-to-properties>
-
开启应用:
mvn compile exec:java -Dkms.url=ws://kms_host:kms_port/kurento
如果你计划使用webserver作为代理,像Nginx或Apache,你需要在注册处理程序时设置AllowedOrigins。 请阅读Spring官方文档条目了解更多信息。
Node 应用配置HTTPS
-
应用程序需要有效的SSL证书才能启用HTTPS:
从本地证书颁发机构请求证书。
创建自己的自签名证书,如下所述。 这将向您展示如何创建所需的文件:server.crt,server.key和server.csr。
将以下更改添加到server.js以启用HTTPS:
...
var express = require('express');
var ws = require('ws');
var fs = require('fs');
var https = require('https');
...
var options =
{
key: fs.readFileSync('key/server.key'),
cert: fs.readFileSync('keys/server.crt')
};
var app = express();
var server = https.createServer(options, app).listen(port, function() {
...
});
...
var wss = new ws.Server({
server : server,
path : '/'
});
wss.on('connection', function(ws) {
....
- 启动应用
npm start
Javascript 应用配置HTTPS
-
您需要提供有效的SSL证书才能启用HTTPS:
从本地证书颁发机构请求证书。
创建自己的自签名证书,如下所述。 这将向您展示如何创建所需的文件:server.crt,server.key和server.csr。
-
使用证书启动应用程序:
http-server -p 8443 -S -C keys/server.crt -K keys/server.key
服务端应用安全
** 配置Kurento Media Server使用Secure WebSocket(wss)**
首先,您需要更改Kurento Media Server的配置文件,即/etc/kurento/kurento.conf.json,取消注释以下行:
"secure": {
"port": 8433,
"certificate": "defaultCertificate.pem",
"password": ""
},
如果此PEM证书是签名的证书(由Verisign等证书颁发机构),那么您就完成了。 如果你要使用自签名证书(适合开发),那么还有更多的工作要做。
您可以通过这样做生成自签名证书:
certtool --generate-privkey --outfile defaultCertificate.pem
echo 'organization = your organization name' > certtool.tmpl
certtool --generate-self-signed --load-privkey defaultCertificate.pem \
--template certtool.tmpl >> defaultCertificate.pem
sudo chown kurento defaultCertificate.pem
由于证书是自签名的,因此应用程序将默认拒绝它。 因此,你需要强迫他们接受它。
-
浏览器应用程序:在建立安全WebSocket连接之前,您需要手动接受证书作为可信证书。 默认情况下,这可以通过连接到连接到https://localhost:8433/kurento并在浏览器中接受证书来完成。
-
Java应用程序,请按照此链接的说明(从这里获取InstallCert.java)。 您需要指示KurentoClient需要配置为允许使用证书。 为此,我们需要创建我们自己的JsonRpcClient:
SslContextFactory sec = new SslContextFactory(true);
sec.setValidateCerts(false);
JsonRpcClientWebSocket rpcClient = new JsonRpcClientWebSocket(uri, sec);
KurentoClient kuretoClient = KurentoClient.createFromJsonRpcClient(rpcClient);
- Node 应用, 请访问这个页面。
其次,您必须更改应用程序逻辑中的WebSocket URI。 例如,在教程中的hello-world应用程序中,将执行以下操作:
- Java: 在HelloWorldApp.java文件中修改这行:
final static String DEFAULT_KMS_WS_URI = "wss://localhost:8433/kurento";
- Browser JavaScript: 在index.js文件中修改这行:
const ws_uri = 'wss://' + location.hostname + ':8433/kurento';
- Node.js: 在server.js文件中修改这行:
const ws_uri = "wss://localhost:8433/kurento";