Golang服务器部署SSL超级大坑

我第一次部署golang SSL相关的东西

这2天用golang部署wss给小游戏测试

我把拿到完整的pem拆解出cert给ListenAndServeTLS传进去

为什么要拆出来用呢!?


因为ListenAndServeTLS给的传参提示是certFile string 

结果我特么给ListenAndServeTLS第二个参数使用的文件居然是这货的结果!

openssl x509 -in server.pem -out server.crt

结果是啥文件呢?crt是完整版chain的第一部分!!

然后测试了2天!研究了2天!!浪费了2天!!!我要狂暴了。

文件给https可以握手成功!

给微信开发者工具用也握手成功!

到真机体验版就特么各种握手不成功!

就在刚才,无意间看到了一篇文章:

微信小程序开发坑之——SSL证书坑 | 微信开放社区

说什么呢!?

 对证书要求如下:

  • HTTPS 证书必须有效;
  • 证书必须被系统信任,即根证书被已系统内置
  • 部署 SSL 证书的网站域名必须与证书颁发的域名一致
  • 证书必须在有效期内
  • 证书的信任链必需完整(需要服务器配置)
  • iOS 不支持自签名证书;
  • iOS 下证书必须满足苹果 App Transport Security (ATS) 的要求;
  • TLS 必须支持 1.2 及以上版本。部分旧 Android 机型还未支持 TLS 1.2,请确保 HTTPS 服务器的 TLS 版本支持
    1.2 及以下版本;
  • 部分 CA 可能不被操作系统信任,请开发者在选择证书时注意小程序和各系统的相关通告。 Chrome 56/57 内核对 WoSign、StartCom 证书限制周知

然后我又去看了一遍ListenAndServerTLS的描述:

原文描述后半段是:

If the certificate is signed by a certificate authority, the certFile should be the concatenation of the server's certificate, any intermediates, and the CA's certificate.

翻译过来就是:

如果证书是由证书颁发机构签署的,则certFile应该是服务器的证书、任何中间设备和CA的证书的串联。

什么意思呢!?

myssl.com测试后的结果如果证书链信息是3个,那么certFile就应该是3个包裹体

像这样:

-----BEGIN CERTIFICATE-----

xxxx
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----

xxxx
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----

xxxx
-----END CERTIFICATE-----

然后我就说想试试完整的fullchain把,然后就成功握手了!fuc*!*!!**!*!***!

err := http.ListenAndServeTLS(strRemote, CA_PATH+"fullchain.pem", CA_PATH+"privkey.pem", nil)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值