https://stackoverflow.com/questions/7580508/getting-chrome-to-accept-self-signed-localhost-certificate
先测试ios上的wss的websocket是否好使,否则会报错
iphone连接mac后,可以在mac上的safri上调试ios的safri,这个很重要
https://www.cnblogs.com/rglmuselily/p/7047814.html
测试websocket的代码
Insert title here onload="startServer()"ha meiyou
需求:
想做个webrtc的demo,测试iphonex上的safari的支持情况。
遇到的问题,webrtc需要https才能用,webrtc需要websocket建立第一次连接,https就需要wss的websocket,
https最好有个测试域名,
wss在ios的safari上没有验证的证书会报错(即使mac上的safari和chrome能过)。
所以现在想要:
1.测试的手机能访问的域名,
2.再制作个自制证书,让ios的适应https的wss的websocket不报错。
1.让ios设备能访问自己的域名
ios没越狱不能改host,但是我们可以使用瓷瓶charles作为代理
这样mac设置了host,ios就通过代理也能访问这个host设置的域名
#########################
安装mac上的工具瓷瓶charles
https://blog.csdn.net/qq_37336604/article/details/80521056
按照常规安装好charles软件之后,打开软件,点击工具栏中的help --> register
输入如下信息:
Registered Name: https://zhile.io License Key: 48891cf209c6d32bf4
安装完后http://localhost:8888 如果有反应则启动成功
本机mac配置host
/etc/hosts
192.168.0.101 haoning.com
本机ip设置自己的想要的域名
ping haoning.com可以通
在ios设备上配置网络
2.自制ca证书如下
如果https的websocket连接没有证书,ios的safari是会报错误的,但是mac下的chrome和safari正常
参考
https://www.cnblogs.com/xinzhao/p/4950689.html
自制一个ca证书
再用ca制作一个server证书
server的证书和key放在nginx里
ca的证书发给客户端
制作证书
openssl genrsa -out ca.key 2048 openssl req -x509 -new -key ca.key -out ca.crt openssl genrsa -out server.key 2048 openssl req -new -key server.key -out server.csr openssl x509 -req -sha256 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out server.crt
在制作server.csr的时候注意一下,common host要输入你的网站的域名,
比如haoning.com
ca.crt导入mac和ios设备
server.key 和server.crt放到nginx配置
所有的key都生成在nginx/conf/ssl下
nginx配置
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; autoindex on; sendfile on; keepalive_timeout 65; upstream mybackend { server 192.168.0.101:3000; } server { # listen 80; # server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; #location / { # root html; # index index.html index.htm; #} listen 443 ssl; server_name haoning.com; ssl on; ssl_certificate ssl/server.crt; ssl_certificate_key ssl/server.key; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_protocols SSLv2 SSLv3 TLSv1; ssl_prefer_server_ciphers on; location / { root html; index index.html index.htm; } location /tap { access_log off; proxy_pass http://mybackend; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
ca.crt这个ca的证书用邮件的方式发给ios,ios打开自带邮件的时候证书可以安装,微信传不行,设置,然后ios设置里搜索 “证书信任设置”
针对跟证书启用完全信任,把刚才装的证书启用信任
nginx挂了一个tap的3000端口的websocket
//http://www.blogjava.net/linli/archive/2014/10/21/418910.html var express = require('express'), app = express(), server = require('http').createServer(app); server.listen(3000); app.get('/', function(req, res) { res.sendfile(__dirname + '/webrtc.html'); }); var WebSocketServer = require('ws').Server, wss = new WebSocketServer({server: server}); // 存储socket的数组,这里只能有2个socket,每次测试需要重启,否则会出错 var wsc = [], index = 1; // 有socket连入 wss.on('connection', function(ws) { console.log('connection'); // 将socket存入数组 wsc.push(ws); // 记下对方socket在数组中的下标,因为这个测试程序只允许2个socket // 所以第一个连入的socket存入0,第二个连入的就是存入1 // otherIndex就反着来,第一个socket的otherIndex下标为1,第二个socket的otherIndex下标为0 var otherIndex = index--, desc = null; if (otherIndex == 1) { desc = 'first socket'; } else { desc = 'second socket'; } // 转发收到的消息 ws.on('message', function(message) { var json = JSON.parse(message); console.log('received (' + desc + '): ', json); console.log('otherIndex ---(' + otherIndex + '): '); wsc[otherIndex].send(message, function (error) { if (error) { console.log('Send message error (' + desc + '): ', error); } }); }); });
启动
node server.js
缺什么npm自己装吧
新版支持ios的safari的webrtc的h5的代码为
mei da kaiLocal:
Remote:
测试,mac下
https://haoning.com/webrtc.html
ios设备下 https://haoning.com/webrtc.html#true
实现两个设备的连接
备注:
在mac下如果安装证书
chrome里面
或者找到系统钥匙串
设置信任
在mac上 装完之后chrome虽然还是红色不安全,但是已经可以用了,safari测试完全安全了