我应该采取什么步骤像浏览器一样手动验证SSL证书?

如何解决我应该采取什么步骤像浏览器一样手动验证SSL证书?

Chrome之类的浏览器如何检查SSL证书?

他们有使用的在线数据库或网站吗?

浏览器采取了哪些步骤来验证SSL证书?

我可以不使用浏览器手动完成操作吗?

解决方法

Chrome之类的浏览器如何检查SSL证书?

证书和链由服务器在SSL握手期间发送。浏览器将基于证书颁发者,提供的链证书和本地根证书创建信任链。它将检查证书的到期和目的,还检查主题的替代名称(可能还有主题),以确保为URL中的域实际颁发了证书。它还可能会对证书吊销做一些检查。

有关详细信息,请参见SSL Certificate framework 101: How does the browser actually verify the validity of a given server certificate?How Do Browsers Handle Revoked SSL/TLS Certificates?

他们有使用的在线数据库或网站吗?

不是。必要的信任库是本地的。他们可能会根据某些在线资源检查撤销。参见Is Certificate validation done completely local?

我可以不使用浏览器手动完成操作吗?

当然,从理论上讲,浏览器的操作可以手动复制。例如,您可以访问站点并使用openssl s_client -showcerts ...获取叶子和中间证书。然后,您可以使用openssl verify来验证证书链,另请参见Verify a certificate chain using openssl verify。然后,您需要查看带有openssl x509 -text ...的叶子证书,以检查目的,有效期和主题。撤销很棘手,但可以借助openssl crlopenssl ocsp来完成,尽管这并不能真正反映出what browsers do

,

用于验证任何SSL / TLS证书的官方算法是defined by PKIXmodified by OCSP。对于当今的TLS,OCSP令牌通常是通过TLS握手中的“装订”来传输的,而不是通过单独的连接来传输的,这需要其他几个RFC,但是这只会影响传输,而不会影响实际的验证。对于 HTTPS ,客户​​端还必须将服务器身份(也称为“主机名”)检查为defined by rfc2818

实际上,浏览器可能有所不同。 Chrome浏览器大多使用Google确定的方案来“推送”他们选择的吊销数据,但是这种情况不时发生变化。上次听说,Firefox使用了自己的“ one-CRL”方案。另外,尽管标准和传统做法是根据SAN检查主机名(如果存在),否则回落到Subject.CN,但自几年前Chrome开始需要且从不使用CN;您会在几个堆栈中找到许多关于“我的自签名证书或其他不是来自真正CA的DIY证书停止在Chrome上运行”的问题。

如果“手动完成”实际上是指手动,那么这将是很多工作。如果您的意思是使用脱机浏览器以外的工具,则会稍微容易一些; OpenSSL(如果已安装)最多可以做到这一点,尽管您需要的功能比Steffen链接中所示的更多,才能正确使用。

如果您的意思是使用浏览器 online 以外的工具,则绝对可以。在最近的几十年中,WWW变得非常流行,并且有无数的程序和库可以访问它,几乎所有程序和库都包括HTTPS(尽管在20年前这种情况并不常见),其中包括验证证书(至少默认情况下是这样) ;许多都具有禁用,绕过或覆盖验证的选项。有curlwget之类的独立工具-或openssl s_client可以执行SSL / TLS和证书部分,而无需首先执行HTTP。有无数的库和中间件,例如python中的ssl(或使用它的requests),nodejs中的tls,(较旧的)HttpsURLConnection和(较新的)java.net.http Java以及Apache HttpComponents之类的第三方;尽管我不熟悉perl和dotnet,但我肯定还有。以及Powershell,这在程序/库的区分上是模糊的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-