Java中的证书透明度验证

因此,我有一个幼稚的想法,即除了证书有效性检查(在Java中)之外,将证书透明性验证作为每个请求的一部分也很容易。

牺牲了整个周末的一半时间,我可以证明这并不是一件小事。 但是, 证书透明性是什么? 简而言之–它是世界上所有TLS证书的公开日志(即使SSL已过时,仍称为SSL证书)。 您可以检查该日志中是否发布了日志,如果没有发布,则有些可疑,因为CA必须将其所有已颁发的证书推送到日志中。 还有其他用例,例如为您的域注册新证书的通知,以检测可能被劫持的DNS管理面板或CA( Facebook免费提供了这样的工具 )。

我想做的是前者–使来自Java应用程序的每个请求在证书透明性日志中验证对方的证书。 似乎这不是开箱即用的(如果可以,我找不到它。 在一次有关JEP 244的讨论中 ,似乎讨论了与证书透明性相关的TLS扩展,但是我找不到它是否是最终支持)。

我开始认为您可以简单地获取证书,并通过证书的指纹检查其是否包含在日志中。 这太容易了–允许通过哈希检查的日志,但是它不是证书的指纹,而是签名的证书时间戳–由日志在包含之前发布的签名。 引用CT RFC :


SCT(签名证书时间戳记)是日志将证书合并到Merkle树中的承诺

merkle树是一种非常酷的数据结构,它通过提供比整个日志短得多的“包含证明”,使外部参与者确信该日志中包含某些内容(从而节省了大量带宽)。 实际上,merkle树的凉爽是为什么我首先对证书透明性感兴趣的原因(因为我们在我当前的面向日志的公司中使用merkle树)

因此,为了检查是否包含 ,您必须以某种方式获取SCT。 最初,我认为使用Certificate Transparency Java库是可能的,但事实并非如此。 拥有它之后,您可以使用客户端在日志中对其进行检查,但是获取它比较困难。 (注意:对于服务器端验证,可以通过HTTP查询日志; 但是浏览器可以使用DNS查询来保留用户的匿名性)。

可以通过三种方式来获取SCT,具体取决于服务器和/或日志和/或CA选择支持的方式:SCT可以包含在证书中,也可以在TLS握手期间作为TLS扩展提供。 ,也可以在握手期间再次包含在TLS装订响应中。 不幸的是,我检查的少数证书中没有存储SCT,因此我必须进入较低级别并调试TLS握手。

我启用了TLS hadnshake 冗长的输出 ,瞧瞧-那里什么都没有。 Google确实将SCT作为TLS扩展包括在内(根据Qualys),但是Java输出未对此进行任何说明。

幸运的是(?)Google发布了Conscrypt –一种基于Java安全提供程序的Google的OpenSSL分支。 事情开始变得一团糟……但我还是去了,包括Conscrypt并将其注册为安全提供程序。 我必须使用Conscrypt TrustManager进行连接(已使用JDK中的所有受信任证书初始化):

KeyStore trustStore = KeyStore.getInstance("JKS");
trustStore.load(new FileInputStream(System.getenv("JAVA_HOME") + "/lib/security/cacerts"), "changeit".toCharArray());
ctx.init(null,new TrustManager[] {new TrustManagerImpl(trustStore, null, null, null, logStore, null, new StrictCTPolicy())}, new SecureRandom());URL url = new URL("https://google.com");
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setSSLSocketFactory(ctx.getSocketFactory());
conn.connect();
conn.getInputStream();
conn.disconnect();

当然,它最初并不起作用,因为Conscrypt不提供一些所需的核心接口(CTLogStore和CTPolicy类)的实现。 实际上,CTLogStore是保存有关所有已知日志信息的重要位(我仍然觉得将“日志提供程序”简称为“ log”很奇怪,但这是公认的术语)。 有一个以JSON形式存在的已知日志列表 ,这很酷,只是花了我一段时间(在外部帮助下)才能弄清楚这些公钥的确切含义。 它们是什么-RSA,ECC? 它们如何编码? 您在RFC和文档中都找不到。 在这里可以看到它是“ SubjectPublicKeyInfo ASN.1结构的DER编码”。 啊。

BouncyCastle进行营救。 我与BouncyCastle的恋爱关系深深。 我讨厌它的直观性和API的复杂性,但是我喜欢它(几乎)具有您可能需要的所有与密码相关的东西。 在花费一些时间试图弄清楚如何将公共密钥转换为PublicKey对象之后,我发现使用PublicKeyFactory.createKey(Base64.getDecoder().decode(base64Key)); 为您提供使用任何算法的参数-它可以返回椭圆曲线关键参数或RSA关键参数。 您只需要将它们包装在另一个类中,然后将它们传递到另一个工厂(典型的BouncyCastle),就可以拥有公共密钥。

当然,现在Google的Conscrypt不再起作用,因为在转换之后,publicKey的编码版本与原始字节不相同,因此日志ID计算错误。 但是我经过一番思考后解决了这个问题,最后,它奏效了–查询了证书透明性日志,并证明该证书有效并且正确地包含在日志中。

整个代码可以在这里找到 。 是的,它使用了几个安全提供程序,一些奇怪的BouncyCastle API和Google提供程序中缺少的一些简单实现。 可能会缓存已知的证书,以便不执行对日志的重复调用,但这超出了我的实验范围。

证书透明性似乎是当今互联网的核心内容。 但是,它是如此晦涩且难以使用。

为什么列表中的公钥类型没有记录(它们至少应在公钥旁边放置一个OID,因为事实证明,并非所有日志都使用椭圆曲线-其中两个使用RSA)。 也许有一个很好的解释,但是为什么在日志中包括SCT而不是证书的指纹? 为什么不然后要求将SCT包括在证书中,而无需将服务器和客户端进行其他配置,而不是将其包括在TLS握手中,而TLS握手则需要升级呢?

据我所知,由于数以百万计的让我们对证书进行加密,因此证书透明性计划现在面临可伸缩性问题。 每个日志(提供者)都应将整个日志提供给所有请求它的人。 解决这不是一件容易的事,并且朝着这个方向努力了,但目前尚无明显的解决方案。

最后,如果Java没有简便的方法,并且所有密码库都可用,我想知道其他语言的情况如何。 他们支持证书透明性还是需要升级?

也许我们都很好,因为浏览器支持它,但是浏览器并不是发出HTTP请求的唯一对象。 API调用是一个巨大的用例,如果可以对其进行劫持,则所造成的损害甚至可能比被骗的单个用户还要大。 因此,我认为应该在两件事上付出更多的努力:
1.改进RFC和2.改进编程生态系统。 我希望这篇文章至少能有所贡献。

翻译自: https://www.javacodegeeks.com/2019/01/certificate-transparency-verification-java.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343837.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[渝粤教育] 西南科技大学 电子商务原理及应用 在线考试复习资料

电子商务原理及应用——在线考试复习资料 一、单选题 1.( )接受商家的送货要求,将商品送到消费者手中。 A.邮局 B.快递公司 C.送货公司 D.物流中心 2.卓越属于( )类型的B2C电子商务企业: A.经营着离线商店的零售商 B.没有离线商店的虚拟零售企业 C.商品制造商 D.网络交易服务公…

如何判断光纤收发器是否有问题?

一般情况下,光纤收发器或光模块的发光功率如下:多模在10db--18db之间;单模20公里在-8db--15db之间;而单模60公里则在-5db--12db之间。但如是光纤收发器的发光功率出现在-30db--45db之间,那么,很有可能这个光…

[渝粤教育] 西南科技大学 经济数学1 在线考试复习资料

经济数学1——在线考试复习资料 一、单选题 1.求曲线在点处的切线方程( )。 A. B. C. D. 2.求函数的导数( )。 A. B. C. D. 3.设(都是常数),则( )。 A.0 B. C. D. 4.如果函数在区间上的导数( ),那么在区间上是一个常数( )。 A.恒为常数 B.可能为常数 C.恒为零 5.设,则( )。…

matlab 列表 剪切,利用Matlab进行文件批量复制、剪切和修改文件名

文件批量复制、剪切和修改文件名电脑环境文件批量复制文件批量剪切批量修改文件名批量修改文件名和复制(剪切)电脑环境MATLAB:2018aWindows:win10文件批量复制close all;clear all;clc;%目的文件目录DST_PATH_t C:\Users\fatflower\Desktop\2018BBC精听…

[渝粤教育] 西南科技大学 行政法学与行政诉讼法学 在线考试复习资料

行政法学与行政诉讼法学——在线考试复习资料 一、单选题 1.某省工商局与税务局联名对某公司作出处罚,吊销其营业执照,罚款100万元。该公司提起复议,复议机关是( ) A.国家工商总局 B.国家税务总局 C.国务院 D.省政府 2.行政相对人对下列行为不能申请行政复议的是哪一种?( ) A…

activemq 实例_在一台计算机上运行多个ActiveMQ实例

activemq 实例几周前,我再次通过Mule ESB解决方案将Apache ActiveMQ用作JMS提供程序。 由于使用ActiveMQ已经有几年了,所以我认为最好检查一些(新)功能,例如故障转移传输和其他群集功能 。 为了能够测试这些最后的东西…

什么是光纤收发器?光纤收发器作用是什么?

许多朋友一听到光纤收发器这五个大字总会有困惑,比如说什么是光纤收发器,光纤收发器又有什么作用等等疑问。那么,什么是光纤收发器呢?光纤收发器又有什么作用呢?接下来我们就跟随飞畅科技的小编一起来详细了解下吧&…

[渝粤教育] 西南科技大学 质量与可靠性管理 在线考试复习资料

质量与可靠性管理——在线考试复习资料 一、单选题 1.下列关于PDCA的内容说法正确的是( ) A.第一阶段进行申请、提交项目等 B.第二阶段按计划实地去做,去落实具体对策。 C.第三阶段实施标准化,以后就按标准进行,该阶段是实施PDCA的关键。 D.第四阶段对策实施后,把握对策的效果 …

php网站点击按钮更新程序,php页面 点击按钮执行更新操作

代码如下:此页面名称为updateScoreNew.php,点击按钮后获得id和score,然后执行更新数据库操作,不知道怎么写,点击按钮怎么都不调用方法,愁死了都。。。 html head ?php if(isset($_POST[update])) { echo &…

【渝粤教育】电大中专品牌管理与推广_1作业 题库

1.品牌是产品或商品的牌子,而商标是商家和商品的标志,是商品经济发展到一定阶段的产物。该说法() A.正确 B.错误 正确 正确答案:左边查询 学生答案:A 2.企业品牌化,是指品牌的核心不是个别的产品…

在15分钟内使用Spring Boot和Spring Security构建一个Web应用程序

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。 开发人员知道保护Web应用程序安全可能会很麻烦。 正确地做是很难的。 最糟糕的是&…

音频光端机的必备要素有哪些?

音频光端机就是发射端把传统的音频模拟信号转换成光信号,通过光纤传输到接收端,在接收端再转换成模拟信号的一种音频设备。那么,音频光端机有哪些必备要素呢?音频光端机的原理是什么呢?接下来我们就一起来详细了解下吧…

php vue联动查询,使用vue.js实现联动效果的示例代码

摘要:本篇文章主要介绍了使用vue.js实现联动效果的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧想用vue.js写一个联动效果,按照自己的思路实验了下,并没有成功。请…

【渝粤教育】电大中专学前儿童语言教育 (4)作业 题库

作业视频教务托管,壹叁路路贰陆陆壹〇肆〇 认为儿童天生就有学习语言能力且体现在一种语言获得装置(LAD)中的教育家是( )。 A.斯金纳 B.乔姆斯基 C.皮亚杰 D.伍顿 错误 正确答案:左边查询 学生答案:未作答 2.下面哪个选…

Spring Setter依赖注入示例

学习如何编写Spring Setter依赖注入示例 。 Setter注入是Spring依赖注入的一种 。 Spring支持字段注入,Setter注入以及构造函数注入,以将依赖项注入Spring托管的bean中。 本教程的范围仅限于Setter注入。 有关Spring依赖注入的更多信息: Sp…

【渝粤教育】电大中专幼儿园课程论 (8)作业 题库

作业视频教务托管,壹叁路路贰陆陆壹〇肆〇 显性课程是 ( )的课程 A.指定的 B.随机的 C.有计划的 D.无计划的 错误 正确答案:左边查询 学生答案:未作答 2.幼儿园课程目标要素不包括( ) A.特征 B.目标 C.评价 D.内容 错误 正确答案:…

http和php怎么交互,实现http与workerman的交互demo

这里主要用到wm的聊天室demo做了一个示例。/*** This file is part of workerman.** Licensed under The MIT License* For full copyright and license information, please see the MIT-LICENSE.txt* Redistributions of files must retain the above copyright notice.** au…

16路开关量光端机产品功能及接线图

飞畅科技生产的16路开关量光端机,可以使开关量信号通过光缆在光纤上传输双向控制。全数字光传输通道,确保高质量的信号传输。面板上有电源指示灯、光信号指示灯数据信号指示灯,可以直观的检测电源、光信号、数据信号状态。单向系列开关量光端…

【渝粤教育】电大中专新媒体营销实务 (2)_1作业 题库

1.新媒体在进行内容传播时,可以做到将文字、图片、视频等同时传播,呈现出()的特点。 A.移动化 B.多元化 C.便捷性 错误 正确答案:左边查询 学生答案:A 2.第四媒体发展到宽带互联网阶段成为(&…

matlab查找替换指令,使用matlab GUI在.txt文件中编辑特定数字使用搜索/替换

使用matlab GUI在.txt文件中编辑特定数字使用搜索/替换 我有一堆不同的模板.txt文件,我想由Matlab中的用户访问。这些模板看起来像这样,但是有一些主要的区别,我将解释:LOAD BOX 1 SUBJ M1_299633_D295158_JUN191910_Aut_ERROR2 E…