翻译:https://raymii.org/s/articles/OpenSSL_Manually_Verify_a_certificate_against_an_OCSP.html?utm_source=tuicool&utm_medium=referral

目录:

1、ocsp客户端获取证书

2、获取证书信任链

3、发送ocsp请求

4、吊销证书

5、其他错误

这篇文章主要用来说明如何借助ocsp服务器来验证证书。ocsp(The Online Certificate Status Protocol)是一种验证证书状态的一种方式,也是CRL(certificate revocation list)证书吊销的一种替代方式。

与传统的CRL比较有以下特点:

由于相对于传统的CRL,一个ocsp响应包含的信息更少,故ocsp能够更有效利用网络和客户资源

用OCSP,客户无需自己解析CRL证书吊销列表,但是客户需要存储状态信息,而由于客户侧需要维护存储缓存,故导致存储信息很复杂。在实际使用中,这点带来的影响却很小,由于第三库提供的相关接口已经帮我们完成此类工作

OCSP通过专用网络、专用证书、在特定的时间公开其服务。OCSP不强制加密,故可能带来信息泄露的风险。

此文章中用到的openssl的版本为:OpenSSL 1.0.1g 7 Apr 2014

1、获取证书用于ocsp验证

首先,我们将从一个网站上获取一个证书,这里我们用Wikipedia作为样例来进行。我们获取证书通过如下命令:

openssl s_client -connect wikipedia.org:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-------END/p'

过该命令可以获取wikipedia.org的客户端证书

保存这个输出到wikipedia.pem文件中

openssl s_client -connect wikipedia.org:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-------END/p' > wikipedia.pem

现在,检查整个证书中是否包含ocsp网址

openssl x509 -noout -ocsp_uri -in wikipedia.pem

若执行正确则输出 http://ocsp.digicert.com ,否则你就不能验证这个证书通过ocsp

2、获取证书链

由于这个证书认证是一级一级逐层进行,故需要获得与这个证书相关的证书链。利用openssl s_client -showcerts 选项,能够查看到在该信任链上的所有相关证书

openssl s_client -connect wikipedia.org:443 -showcerts 2>&1 < /dev/null

如你所见,输出能够看到两个证书,number 1 和number 0,其中number 0就是我们刚刚获取的那个证书。如果你的网站有更多证书在认证链中,那么你将看到更多证书。为了发送证书,需要保存证书链中所有证书到一个文件chain.pem,按照刚刚命令输出的证书顺序,根证书总是在文件结尾。

3、发送ocsp认证请求

现在我们有ocsp认证请求的所有信息,使用下面命令发送ocsp认证请求。

openssl ocsp -issuer chain.pem -cert wikipedia.pem -text -url http://ocsp.digicert.com

其结果如下

OCSP Request Data:

Version: 1 (0x0)

Requestor List:

Certificate ID:

Hash Algorithm: sha1

Issuer Name Hash: ED48ADDDCB7B00E20E842AA9B409F1AC3034CF96

Issuer Key Hash: 50EA7389DB29FB108F9EE50120D4DE79994883F7

Serial Number: 0114195F66FAFF8FD66E12496E516F4F

Request Extensions:

OCSP Nonce:

0410DA634F2ADC31DC48AE89BE64E8252D12

OCSP Response Data:

OCSP Response Status: successful (0x0)

Response Type: Basic OCSP Response

Version: 1 (0x0)

Responder Id: 50EA7389DB29FB108F9EE50120D4DE79994883F7

Produced At: Apr 9 08:45:00 2014 GMT

Responses:

Certificate ID:

Hash Algorithm: sha1

Issuer Name Hash: ED48ADDDCB7B00E20E842AA9B409F1AC3034CF96

Issuer Key Hash: 50EA7389DB29FB108F9EE50120D4DE79994883F7

Serial Number: 0114195F66FAFF8FD66E12496E516F4F

Cert Status: good

This Update: Apr 9 08:45:00 2014 GMT

Next Update: Apr 16 09:00:00 2014 GMT

Signature Algorithm: sha1WithRSAEncryption

56:21:4c:dc:84:21:f7:a8:ac:a7:b9:bc:10:19:f8:19:f1:34:

c1:63:ca:14:7f:8f:5a:85:2a:cc:02:b0:f8:b5:05:4a:0f:28:

50:2a:4a:4d:04:01:b5:05:ef:a5:88:41:d8:9d:38:00:7d:76:

1a:aa:ff:21:50:68:90:d2:0c:93:85:49:e7:8e:f1:58:08:77:

a0:4e:e2:22:98:01:b7:e3:27:75:11:f5:b7:8f:e0:75:7d:19:

9b:74:cf:05:dc:ae:1c:36:09:95:b6:08:bc:e7:3f:ea:a2:e3:

ae:d7:8f:c0:9d:8e:c2:37:67:c7:5b:d8:b0:67:23:f1:51:53:

26:c2:96:b0:1a:df:4e:fb:4e:e3:da:a3:98:26:59:a8:d7:17:

69:87:a3:68:47:08:92:d0:37:04:6b:49:9a:96:9d:9c:b1:e8:

cb:dc:68:7b:4a:4d:cb:08:f7:92:67:41:99:b6:54:56:80:0c:

18:a7:24:53:ac:c6:da:1f:4d:f4:3c:7d:68:44:1d:a4:df:1d:

48:07:85:52:86:59:46:d1:35:45:1a:c7:6b:6b:92:de:24:ae:

c0:97:66:54:29:7a:c6:86:a6:da:9f:06:24:dc:ac:80:66:95:

e0:eb:49:fd:fb:d4:81:6a:2b:81:41:57:24:78:3b:e0:66:70:

d4:2e:52:92

wikipedia.pem: good

This Update: Apr 9 08:45:00 2014 GMT

Next Update: Apr 16 09:00:00 2014 GMT

如果你需要更简略的输出,去掉-text 选项,该选项一般用于调试

openssl ocsp -issuer chain.pem -cert wikipedia.pem -url http://ocsp.digicert.com

wikipedia.pem: good

This Update: Apr 9 08:45:00 2014 GMT

Next Update: Apr 16 09:00:00 2014 GMT

4、吊销证书

如果你有一个吊销的证书,你也可以测试该证书按照上述步骤,所得的响应如下:

Response verify OK

test-revoked.pem: revoked

This Update: Apr 9 03:02:45 2014 GMT

Next Update: Apr 10 03:02:45 2014 GMT

Revocation Time: Mar 25 15:45:55 2014 GMT

5、其他错误

如果证书和ocsp服务不匹配,验证将错误,使用-text选项可以查看具体错误。

ocsp java_OpenSSL 通过OCSP手动验证证书相关推荐

  1. 密码学专题 证书和CA指令 申请证书|建立CA|CA操作|使用证书|验证证书

    Req指令介绍 功能概述和指令格式 req指令一般来说应该是提供给证书申请用户的工具,用来生成证书请求以便交给CA验证和签发证书.但是,OpenSSL的req指令的功能远比这样的要求强大得多,它不仅可 ...

  2. 无法验证证书 java_求助大神“无法验证证书 将不执行该应用程序”我该怎么办?...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 无法验证证书将不执行该应用程序:详细如下,该如何解决? java.security.cert.CertificateException: java.sec ...

  3. JSSE访问带有未验证证书的HTTPS

    原文:http://www.uml.org.cn/j2ee/200604241.htm 摘 要 JSSE是一个SSL和TLS的纯Java实现,通过JSSE可以很容易地编程实现对HTTPS站点的访问.但 ...

  4. struts2 手动验证和框架验证

    手动验证 struts.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts ...

  5. Spring MVC:Trgger手动验证表单对象

    有时可能需要在Spring MVC @Controller中使用手动验证. 使用Spring的org.springframework.validation.ValidationUtils类非常简单. ...

  6. 手动发布证书吊销列表

    什么是吊销证书及吊销列表CRL? 为帮助您维护组织公钥基础机构 (PKI) 的完整性,如果证书的受领人离开组织,或者证书受领人的私钥已泄露,或者如果其他一些与安全相关的事件规定它不再需要将证书视为&q ...

  7. kubernetes V1.10.4 集群部署 (手动生成证书)

    说明:本文档涉及docker镜像,yaml文件下载地址 链接:https://pan.baidu.com/s/1QuVelCG43_VbHiOs04R3-Q 密码:70q2 本文只是作为一个安装记录 ...

  8. LightProxy 无线端代理iOS,安装验证证书后仍不生效

    现象 按照之前使用代理的经验,扫码安装,安装完后 打开手机 设置 => 通用 => 关于本机 => 描述文件与设备管理 验证证书 配置代理后,不能访问网页,提示证书无效 解决办法 添 ...

  9. Kubeadm手动更新证书

    kubeadm certs 提供管理证书的工具 官网地址 kubeadm certs check-expiration 查看证书到期时间 kubeadm certs renew 手动续订证书 该命令使 ...

最新文章

  1. junit进行测试加载多个spring配置文件
  2. Linux之Ansible入门用法(实验解析)
  3. android wheelview 字体颜色,百行代码实现Android WheelView
  4. 数据类型之字符串练习
  5. [学习笔记] 伸展树splay详解+全套模板+例题[Luogu P3369 【模板】普通平衡树]
  6. microwindows位图解析
  7. K8S的SDN容器网络解决方案【机制篇】
  8. 【实践】通过Composer,安装yii2-advanced
  9. 三角网导线平差实例_三角网间接平差示例
  10. Redis事务特性分析
  11. vs2019运行提示脚本错误
  12. Unity游戏开发客户端面经——性能优化(初级)
  13. physx: pid balance controll
  14. 详细理解TDMA以及OFDMA,更容易读懂论文
  15. c语言实现注册页面窗口,C语言控制台程序实现的注册登录
  16. JAVA生成热点图,JAVA 后端生成热力图图片返回
  17. 基于mysql的应用程序设计[j] 兰旭辉_熊家军_邓刚_高校C语言自动考试系统参考文献...
  18. Iterator详解
  19. 微信小程序之子页面动态修改导航栏标题文字内容
  20. CoreJava基础

热门文章

  1. 图像多尺度特征融合、特征金字塔总结
  2. 通达oa与php环境冲突,通达OA案|我的OA二次开发经验
  3. Docker基础入门(基本命令)
  4. windows软件-----办公效率提高
  5. java三重des加密_基础才是重中之重~BouncyCastle实现的DES3加密~java通用
  6. 游戏AI的缘起与进化
  7. 257页12万字城市园林绿化养护方案
  8. 使用js cookie实现自动登录
  9. 【做题技巧】输出多个数时最后一个数后空格的处理
  10. [echarts] 引入png图片或者图标