Openssl X509 v3 AuthorityKeyIdentifier实验与逻辑分析

       Openssl是X509的事实标准,目前主流OS或个别安全性要求较高的设计场景,对X509的证书链验证已经不在停留在只从数字签名校验了,也就是仅仅从公钥验签的角度,在这些场景中,往往还会校验AuthorityKeyIdentifier和SubjectKeyIdentifier的一致性,也即下级证书的AuthorityKeyIdentifier应该与上级证书的SubjectKeyIdentifier一致,这两个参数是X509 v3  extensions的范围。

        但是X509对SubjectKeyIdentifier与AuthorityKeyIdentifier本身以及它们之前的一致性校验逻辑,都没有严格的规定,因此我们只能follow Openssl的逻辑。

        Openssl的SubjectKeyIdentifier可以为hash,此时是公钥的160bit sha-1散列,或者是一个hex字符串,此时是人为预设的SubjectKeyIdentifier。

        Openssl的AuthorityKeyIdentifier是follow X509定义的,AuthorityKeyIdentifier实际上是一个组,有三个组成员,keyid,dirname,serialnum,keyid就是上级证书的SubjectKeyIdentifier。你可以提供authoritykeyidentifier=keyid,issuer,作为openssl参数,它会尽量把以上三个组成员给填满,为什么说尽量呢,因为上级证书可能压根就没有SubjectKeyIdentifier这个v3 extension属性。

        Openssl的证书链校验,如果提供了issuer_checks参数也是可以校验以上一致性的。

        openssl配置subjectKeyIdentifier = hash,此时openssl在签发证书时,会加入subjectKeyIdentifier参数,如果subjectKeyIdentifier这个参数没有的话,缺省是不会有任何subjectKeyIdentifier被加入的。

        此时如果authorityKeyIdentifier = keyid,issuer,那么只有issuer有效,也即会加入上级证书的dirname,serialnum。

        当subjectKeyIdentifier = hash;authorityKeyIdentifier = keyid,issuer时,产生的下级证书如下图。

        当没有subjectKeyIdentifier = hash;authorityKeyIdentifier = keyid,issuer:always时,产生的下级证书如下图。其中issuer:always强制加入dirname,serialnum两项。

        当没有subjectKeyIdentifier配置;仅有authorityKeyIdentifier = keyid,issuer时,产生的下级证书如下图。可以看到CA证书没有 subjectKeyIdentifier,下级证书没办法复制到subjectKeyIdentifier因此authorityKeyIdentifier 仅有其他两项。

        以上各种情况,均可以通过以下命令验证通过。

        openssl verify -CAfile cacert.pem --issuer_checks certwork.pem

以下为用到的配置文件与测试命令。

[ req ]
distinguished_name = req_distinguished_name
policy             = policy_match
x509_extensions     = v3_ca# For the CA policy
[ policy_match ]
countryName             = optional
stateOrProvinceName     = optional
organizationName        = optional
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional[ req_distinguished_name ]
countryName                     = Country Name (2 letter code)
countryName_default             = IN
countryName_min                 = 2
countryName_max                 = 2
stateOrProvinceName             = State or Province Name (full name) ## Print this message
stateOrProvinceName_default     = KARNATAKA ## This is the default value
localityName                    = Locality Name (eg, city) ## Print this message
localityName_default            = BANGALORE ## This is the default value
0.organizationName              = Organization Name (eg, company) ## Print this message
0.organizationName_default      = GoLinuxCloud ## This is the default value
organizationalUnitName          = Organizational Unit Name (eg, section) ## Print this message
organizationalUnitName_default  = Admin ## This is the default value
commonName                      = Common Name (eg, your name or your server hostname) ## Print this message
commonName_max                  = 64
emailAddress                    = Email Address ## Print this message
emailAddress_max                = 64[ v3_ca ]
#subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
basicConstraints = critical,CA:true
nsComment = "OpenSSL Generated Certificate"[ v3_work ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:awlays,issuer:always
basicConstraints = critical,CA:true
nsComment = "OpenSSL Generated Certificate"
openssl genrsa -out private.pem 2048openssl req -new -x509 -days 3650 -config opensslroot.cfg -key private.pem -out cacert.pemopenssl x509 -text -noout -in cacert.pemopenssl genrsa -out workkey.pem 2048openssl req -new -key workkey.pem -config opensslroot.cfg -out certwork.csropenssl req -text -in certwork.csropenssl x509 -req -days 365 -CA cacert.pem -extfile opensslroot.cfg -extensions v3_work -CAcreateserial -CAkey private.pem -in certwork.csr -out certwork.pemopenssl x509 -in certwork.pem -text

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

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

相关文章

2023年阿里云双11优惠活动,省钱攻略来了!

2023阿里云双11优惠活动开启了,轻量2核2G3M带宽服务器87元一年、2核4G4M带宽165元一年,云服务器ECS经济型e实例2核2G3M固定带宽优惠价格99元一年,新老用户同享,并且续费不涨价,第二年99元续费。阿里云个人和企业用户还…

抽象 I/O设备模型

I/O设备模型框架 RT-Thread提供了一套简单的I/O设备模型框架。 如图所示,它位于硬件和应用程序之间,共分成三层,从上到下分别是I/O设备管理层、设备驱动框架层、设备驱动层。 应用程序通过I/O设备管理接口获得正确的设备驱动,然…

PC6410 DC-DC降压调整器低纹波高效率低功耗

PC6410是一款由基准电压源、振荡电路、比较器、PWM/PFM 控制电路等构成的CMOS降压DC/DC调整器。利用PWM/PFM自动切换控制电路达到可调占空比,具有全输入电压范围内的低纹波、高效率和大输出电流等特点。PC6410内置功率MOSFET,使用过压、过流、过热、短路…

为什么串行通信中停止位(停止bit、stop bit)通常使用高电平?

文章目录 基于高电平的停止位选择:理解其深层原因引言数据通信和停止位数据通信简介停止位的定义和作用 为什么选择高电平作为停止位?硬件的考虑误码率的影响 总结参考资料 基于高电平的停止位选择:理解其深层原因 引言 在数字通信中&#…

索引是什么?如何创建?哪些情况下需要使用?

在数据库中,索引是一种用于提高查询速度的数据结构。它可以帮助我们快速地找到需要的数据,而不必扫描整个数据库。如果你是一名业务人员,你可能会问:“为什么我们需要使用索引?” 一、什么是索引? 索引是一…

【word密码】word设置只读方式的四个方法

想要将word文档设置为只读模式,方法有很多,今天小奥超人介绍几个方法给大家。 方法一:文件属性 常见的、简单的设置方法,不用打开word文件,只需要右键选择文件,打开文件属性,勾选上【只读】选…

settings.json配置

settings.json配置 {"editor.tabSize": 2,"git.ignoreWindowsGit27Warning": true,"workbench.editor.untitled.hint": "hidden","security.workspace.trust.untrustedFiles": "open","[vue]": {"…

Mac电脑好用的窗口管理软件 Magnet 中文for mac

Magnet是一款用于Mac操作系统的窗口管理工具,它可以帮助您快速和方便地组织和管理应用程序窗口,以提高您的工作效率和多任务处理能力。 以下是Magnet的一些主要功能和特点: 窗口自动调整:Magnet允许您通过简单的拖放操作或使用快…

Linux系统编程,Linux中的文件读写文件描述符

文章目录 Linux系统编程,Linux中的文件读写操作1.open函数,打开文件 Linux系统编程,Linux中的文件读写操作 1.open函数,打开文件 我们来看下常用的open函数 这个函数最终返回一个文件描述符struct file 我们查看一下它的Ubuntu…

什么是集成测试?集成的方法有哪些?

前言 综合测试整合测试非常复杂,需要一些开发和逻辑技能。的确如此!那么把这个测试整合到我们的测试策略中的目的是什么呢?这个问题我们先不着急回答,让我们一步步往下看你就知道了。 为什么要进行集成测试? 以下是一…

四川竹哲电子商务有限公司怎么样?是真的吗

在当今数字化时代,抖音电商服务逐渐成为了企业营销的重要手段。在这个充满机遇与挑战的领域,四川竹哲电子商务有限公司以其卓越的服务质量,成为了行业内的佼佼者。本文将详细介绍四川竹哲电子商务有限公司的抖音电商服务,帮助您了…

Kyligence 入选 Gartner® 2023 客户之声报告,高分获评“卓越表现者”

近日,Gartner 发布了最新的《2023 分析和商业智能平台“客户之声”报告》(Voice of the Customer for Analytics and Business Intelligence Platforms, 2023, October 2023)。跬智信息(Kyligence)成功入选该报告,并凭借 4.7 分&a…