事件由来

如果最近发现iOS APP打开h5非常慢,达到5秒以上,而安卓又正常,如果刚好你又是使用了Let's Encrypt 的免费SSL服务,恭喜你,你可能是一位运营商干扰的受害者。

原因:
近期由于众所周知的原因,国内无法直接访问 Let's Encrypt 的 OSCP 域名,导致出现了不能签发证书、OCSP Stapling 失败、网页打开慢等问题。

经检查目前是 ocsp.int-x3.letsencrypt.org 的 cname 域名 a771.dscq.akamai.net 受到了干扰,可以采用本地修改hosts的方案进行临时处理。

在/etc/hosts中添加

    23.32.3.72     ocsp.int-x3.letsencrypt.org

生成 OCSP Stapling 文件

经过以下步骤生成所需的用于 OCSP Stapling 验证的文件

首先,需要准备三份证书:

站点证书(website.pem)+ 根证书(root.pem)+ 中间证书(intermediate.pem)

中间证书和根证书,需要根据你的证书的 CA,去下载对应的证书

以下列出了 Let's Encrypt 的中间证书和根证书的下载地址:

根证书:
DST Root CA X3 https://ssl-tools.net/certificates/dac9024f54d8f6df94935fb1732638ca6ad77c13.pem
ISRG Root X1 https://letsencrypt.org/certs/isrgrootx1.pem

中间证书:
Let's Encrypt Authority X1 https://letsencrypt.org/certs/lets-encrypt-x1-cross-signed.pem
Let's Encrypt Authority X2 https://letsencrypt.org/certs/lets-encrypt-x2-cross-signed.pem
Let's Encrypt Authority X3 https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem
Let's Encrypt Authority X4 https://letsencrypt.org/certs/lets-encrypt-x4-cross-signed.pem

这里以 DST Root CA X3 根证书 + Let's Encrypt Authority X3 中间证书 为例(现在 Let's Encrypt 签发的证书基本都是这样的组合):

# 下载根证书和中间证书
wget -O root.pem https://ssl-tools.net/certificates/dac9024f54d8f6df94935fb1732638ca6ad77c13.pem
wget -O intermediate.pem https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem# 生成 OCSP Stapling 验证文件
# 注意,中间证书在上、根证书在下
cat intermediate.pem > chained.pem
cat root.pem >> chained.pem

这样,生成的 chained.pem 就是所需的 OCSP Stapling 验证文件。

如果没有 站点证书(website.pem),可以输入如下命令:

openssl s_client -connect mydomain.com:443 -servername mydomain.com-showcerts < /dev/null 2>&1

[root@hadoop-nginx .acme.sh]# openssl s_client -connect mydomain.com:443 -servername mydomain.com-showcerts < /dev/null 2>&1
CONNECTED(00000003)
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = app6.kedaqianbao.com
verify return:1
---
Certificate chain0 s:/CN=app6.kedaqianbao.comi:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
-----BEGIN CERTIFICATE-----
MIIFXzCCB......................................................
...............................................................
...........................................
..........
.
-----END CERTIFICATE-----1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3i:/O=Digital Signature Trust Co./CN=DST Root CA X3
-----BEGIN CERTIFICATE-----
MIIEkjCCA3qgA..................................................
...........................................
...........................
..................
-----END CERTIFICATE-----
---
Server certificate
subject=/CN=app6.kedaqianbao.com
issuer=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
---
No client certificate CA names sent
Peer signing digest: SHA512
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 3246 bytes and written 444 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:Protocol  : TLSv1.2Cipher    : ECDHE-RSA-AES256-GCM-SHA384Session-ID: A3E868ED8A9FFC0687B8379A6AD26AA7B368FB8B270DDD6C61441485E56839A4Session-ID-ctx: Master-Key: C0D9365E17DA7C48053CC179D6E15C0E12FB2572C00E58725044D1A8E7B88823D7757E31C847F01543D3FD0CFB01517EKey-Arg   : NoneKrb5 Principal: NonePSK identity: NonePSK identity hint: NoneTLS session ticket lifetime hint: 600 (seconds)TLS session ticket:0000 - 09 34 28 07 47 20 76 19-96 1c ca 19 17 3c bf 32   .4(.G v......<.20010 - fc 6e d7 7d 0e 44 0e 45-18 b5 a4 00 a5 8d d9 98   .n.}.D.E........0020 - f4 18 38 9e 1b b1 58 bb-26 b5 cb 60 b2 38 9a b9   ..8...X.&..`.8..0030 - a0 e5 8c e2 81 9a 63 95-e2 9e 71 84 29 23 65 d8   ......c...q.)#e.0040 - 1c 4a 76 78 02 ac c4 a0-e9 5d b2 23 87 db 47 8c   .Jvx.....].#..G.0050 - e6 52 95 45 80 a4 f5 d8-c2 4f 19 1b 2f 1e 92 b7   .R.E.....O../...0060 - 43 53 e9 a4 af 00 4f 4c-d0 11 af 7b bf 5f 90 a9   CS....OL...{._..0070 - c6 fe 7e a8 ca ac a4 08-a8 d2 83 fb cd 4d 27 e4   ..~..........M'.0080 - e2 0d 17 46 00 53 39 2b-c8 5d c9 15 3f 60 2a 0c   ...F.S9+.]..?`*.0090 - d9 7e f7 11 eb 75 1a 0d-a9 06 e7 f5 38 bb 2b 39   .~...u......8.+900a0 - f7 9d 2a 07 f4 b5 a1 29-d3 39 c2 71 3b 84 d3 f5   ..*....).9.q;...00b0 - fa 47 4a ab 3d ae de c6-b9 e7 4a 99 2f 10 7c 0c   .GJ.=.....J./.|.Start Time: 1592291163Timeout   : 300 (sec)Verify return code: 0 (ok)
---
DONE
[root@hadoop-nginx .acme.sh]# 

可以看到 0 和 1 两个,-----BEGIN CERTIFICATE----- 开始的 证书文本。

0、表示 站点证书
1、 表示中间证书

复制 站点证书内容(需要包含-----BEGIN CERTIFICATE----- 和  -----END CERTIFICATE-----),为 website.pem 文件。

OCSP Stapling Response

openssl x509 -in website.pem -noout -ocsp_uri

使用这个命令后,返回你的证书对应的 OCSP 服务地址

例如,Let's Encrypt 现在的 OCSP 服务地址是 http://ocsp.int-x3.letsencrypt.org/

以 Let's Encrypt 为例,获取站点证书的 OCSP Response

[root@hadoop-nginx kedawenhua]# openssl ocsp -no_nonce \
>   -respout /home/docker/software/nginx/conf/ssl/mydomain.ocsp_res.der \
>   -issuer intermediate.pem \
>   -CAfile chained.pem \
>   -VAfile chained.pem \
>   -cert website.pem \
>   -url http://ocsp.int-x3.letsencrypt.org \
>   -header "HOST" "ocsp.int-x3.letsencrypt.org"
Response verify OK
website.pem: goodThis Update: Jun 16 05:00:00 2020 GMTNext Update: Jun 23 05:00:00 2020 GMT

-respout参数 是指定OCSP 响应数据的 保存位置,将这个位置填入在 nginx 配置文件的 ssl_stapling_file 中,如下开启ssl_stapling。

这里如果出现如下错误的话,说明你的openssl使用了1.1.0版本,这个时候已经不需要指定HOST,把上面命令中的“-header "HOST" "ocsp.int-x3.letsencrypt.org"”删掉就好了。

Missing = in header key=value
ocsp: Use -help for summary.
    ssl_stapling on;ssl_stapling_verify on;ssl_stapling_file /home/docker/software/nginx/conf/ssl/mydomain.ocsp_res.der;

重载nginx服务之后,检查是否成功开启。

    openssl s_client -connect mydomain.com:443 -status -tlsextdebug < /dev/null 2>&1 | grep -i "OCSP response"

如下:

最后将有关操作制成脚本,添加到 crontab 中自动更新。

重新加载H5, 会发现访问速度,基本恢复正常

【异常】IOS系统 H5 Https请求后端,速度不稳定,很慢。OCSP域名无法访问的问题相关推荐

  1. 关于IOS系统,H5页面操作history.go(n)回退页面时不会刷新页面数据的问题

    关于IOS系统 H5页面操作history.go(n)回退页面时不会刷新页面数据的问题 在我们从操作h5页面时,离开当前页面后,在使用返回键或者history.go(n)再次回到页面,有时是需要刷新当 ...

  2. Charles抓包(iOS的http/https请求)

    Charles安装 官网下载安装Charles: https://www.charlesproxy.com/download/ 2. HTTP抓包 (1)查看电脑IP地址 (2)设置手机HTTP代理 ...

  3. charles浏览器抓包https_十分钟学会Charles抓包(iOS的http/https请求)

    Charles安装 HTTP抓包 HTTPS抓包 1. Charles安装 2. HTTP抓包 (1)查看电脑IP地址 Help→Local IP Address查看本机地址 电脑IP地址 (2)设置 ...

  4. 前端Vue请求后端Django遇到127.0.0.1拒绝访问

    前端Vue和后端Django搭建前后端分离的项目 我是看的这几个链接讲的如何实现前端Vue后端Django的前后端分离的项目的搭建(几个链接的内容实际上大同小异): Python 3+Django 3 ...

  5. iOS手机客户端https请求忽略证书认证

    //设置证书,在客户端默认忽略证书认证 - (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectio ...

  6. Charles抓包(iOS的http/https请求) -可用

    每个项目产品都要加埋点,加500行埋点是不是会占用你一两天的时间而且很容易犯错,想只用一小时准确加完这500行埋点剩下一天喝茶聊天么?来试试这520工具, 高效加埋点,目前我们公司100号前端都在用, ...

  7. 苹果怎么清理系统内存_怎么清理iOS系统的灰色内存?其实办法很简单

    iPhone手机查看存储空间的时候,都会看到一个名为"其他"的栏目,标记颜色是"灰色".而"其他"这个项目,占用的内存往往是好几个GB的内存 ...

  8. iOS使用自签名证书实现HTTPS请求

    原文链接:http://www.jianshu.com/p/e6a26ecd84aa 由于苹果规定2017年1月1日以后,所有APP都要使用HTTPS进行网络请求,否则无法上架,因此研究了一下在iOS ...

  9. iOS客户端校验https网络请求证书

    其实iOS系统的网络请求都有校验,比如NSURLConnection.NSURLSession都有系统的自动校验.具体的校验可进行百度 我使用的是NSURLConnection进行的网络请求,NSUR ...

最新文章

  1. SSL加密包解析的几个概念梳理
  2. 抽屉开关_技术天地|380伏抽屉开关指示灯更换流程
  3. php微信模板信息发送的代码例子,微信模板消息发送样例
  4. java怎么判断按钮是否被点击_怎么判断肌肉训练后是否已经恢复
  5. 电子商务型网站该如何选择虚拟主机
  6. HTML基础【1】:认识 HTML
  7. 利用数组求前n个质数
  8. STM32F407过程记录
  9. python手机版做小游戏代码大全-用Python设计一个经典小游戏
  10. Metronik 案例分享:使用 Aspose.Words 快速生成模板。
  11. ios dyld: Library not loaded: @rpath/xxx.framework/xxx 之根本原因
  12. 滴滴新算法让你应对女友?道翰天琼认知智能机器人平台API接口大脑为您揭秘-64
  13. matlab+butter+多维,matlab butter c实现
  14. 解决swap file .swp already exists 问题
  15. dede栏目添加自定义字段方法
  16. 狄利克雷条件和帕塞瓦尔定理
  17. Win7中IIS出现“HTTP 错误 404.17 - Not Found 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理。
  18. 本地代码怎么上传到码云?
  19. 关于720全景视频在移动端播放的兼容问题汇总,截止2017年11月29日
  20. vue+node.js手把手教你搭建一个直播平台(二)

热门文章

  1. Perforce使用中文教程
  2. Windows7 SP1(MSDN版)
  3. 怎样用条码软件制作各种各样的警示标牌
  4. 蓝底换白底边缘不干净_全网最详细的证件照换背景以及照片排版
  5. 圆头像 微信小程序 绘图_[微信小程序]授权头像修改圆形
  6. 数据中心托管服务市场现状研究分析与发展前景预测报告
  7. 友盟小米收不到推送消息_一个轻量级、可插拔的Android消息推送框架。一键集成推送(极光推送、友盟推送、华为、小米推送等)...
  8. 统计各排序算法运行的时间
  9. 项目立项管理(知识要点)
  10. 邮件服务器配置错误Unknown SMTP host: