基于resip 的WSS调试(踩坑记)

1.  如何调试WSS(生效)?  

  •   必须resip库生效SSL,即编译时加入USE_SSL, 整个SSL证书读取及处理过程在stack/ssl/Security.cxx
  •   要有正确的SSL证书, 否则在启动程序时,会报SSL相关的错误。
  •   repro关于WSS的配置,网上找不到参考的。 只能自己一点点摸索。 抓包WSS端口发现TLS握手错误。 下一步重点必须要调通TLS
2. 调试TLS
  •   重点理解几个概念 -----  根证书, 本地私钥, 本地certificate, X.509(代码里会涉及), 证书格式(文件后缀名)
       KEY 通常指私钥。
       CSR 是Certificate Signing Request的缩写,即证书签名请求,这不是证书,可以简单理解成公钥,生成证书时要把这个提交给权威的证书颁发机构。
       CRT 即 certificate的缩写,即证书   
       CA(Certificate Authority)被称为证书授权中心,是数字证书发放和管理的机构。
       X.509一种证书格式 认证者总是CA或由CA指定的人,这些字段包含有关用户或设备及其相应公钥的信息。 一般以.crt结尾
   
       .PEM,一般是文本格式,可保存证书,可保存私钥。
       .CRT,可以是二进制格式,可以是文本格式,与 .DER 格式相同,不保存私钥
       .DER .CER,文件是二进制格式,只保存证书,不保存私钥
   
  •   证书如何生成(测试目的)
      脚本位置: resiprocate-1.10.2\resip\certs
      深入了解: 网上搜  如何使用 openssl 生成证书
      自己生成,可参考:  https://www.cnblogs.com/lan1x/p/5872915.html
                    https://www.akadia.com/services/ssh_test_certificate.html
 
             注意事项:  要注意的是Common Name这里,要填写成使用SSL证书(即:https协议)的域名或主机名,否则浏览器会认为不安全。   
  
  
  •   认证流程(以https以例)

    1、服务器生成一对密钥,私钥自己留着,公钥交给数字证书认证机构(CA)

    2、CA进行审核,并用CA自己的私钥对服务器提供的公钥进行签名生成数字证书

    3、在https建立连接时,客户端从服务器获取数字证书,用CA的公钥(根证书)对数字证书进行验证,比对一致,说明该数字证书确实是CA颁发的(得此结论有一个前提就是:客户端的CA公钥确实是CA的公钥,即该CA的公钥与CA对服务器提供的公钥进行签名的私钥确实是一对。),而CA又作为权威机构保证该公钥的确是服务器端提供的,从而可以确认该证书中的公钥确实是合法服务器端提供的。

    注:为保证第3步中提到的前提条件,CA的公钥必须要安全地转交给客户端(CA根证书必须先安装在客户端),因此,CA的公钥一般来说由浏览器开发商内置在浏览器的内部。于是,该前提条件在各种信任机制上,基本保证成立。

   
  •   支持TLS的sip终端测试(linphone)
       目的是通过终端的log查看错误到底出在那里, windows版的有log,通过log确认发现有加载root.ca的过程, 将resip的根证书替换它, 发现TLS就能注册成功。
       因此同样的方法,把本地的根证书加载到browser
4. browser测试
      仍TLS握手失败, 抓包发现client回unknow CA,感觉应该是加载证书成功(参考网上的操作)
      通过JS  log查看,发现  net::ERR_CERT_COMMON_NAME_INVALID       

 

 


    最终解决方案:
     IE选项里去掉红色选项

 

WSS注册成功:

 

 

 

posted @ 2020-03-24 15:09  weiweivv  阅读(714)  评论(1编辑  收藏  举报