自己建设一个网站需要多少钱,群发软件,网站建设中页面模板,网店设计模板Openssl是X509的事实标准#xff0c;目前主流OS或个别安全性要求较高的设计场景#xff0c;对X509的证书链验证已经不在停留在只从数字签名校验了#xff0c;也就是仅仅从公钥验签的角度#xff0c;在这些场景中#xff0c;往往还会校验AuthorityKeyIdentifier和SubjectKe… 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实际上是一个组有三个组成员keyiddirnameserialnumkeyid就是上级证书的SubjectKeyIdentifier。你可以提供authoritykeyidentifierkeyid,issuer作为openssl参数它会尽量把以上三个组成员给填满为什么说尽量呢因为上级证书可能压根就没有SubjectKeyIdentifier这个v3 extension属性。 本篇重点放在这里Issuer的正确概念是一个签发机关而Subject是证书所属部门证书的Issuer是可以随意指定的这容易理解比如三级证书root-ca-workwork的Issuer被指定为ca这无可厚非它说明work证书是由二级证书ca签发的。但是 AuthorityKeyIdentifier中的Issuer并非是直接上级证书的Subject而是Root证书的Subject。AuthorityKeyIdentifier其他两项参数都是跟随直接证书的但唯独这个Issuer是跟随根证书的这里表达的是整体“签发机关”如果把Issuer搞混了一定过不了openssl verify。可利用x509ExtensionUtils.createAuthorityKeyIdentifier(signercert)来提取AKI。 Openssl的证书链校验如果提供了issuer_checks参数也是可以校验以上一致性的。 openssl配置subjectKeyIdentifier hash此时openssl在签发证书时会加入subjectKeyIdentifier参数如果subjectKeyIdentifier这个参数没有的话缺省是不会有任何subjectKeyIdentifier被加入的。 此时如果authorityKeyIdentifier keyid,issuer那么只有issuer有效也即会加入上级证书的dirnameserialnum。 当subjectKeyIdentifier hashauthorityKeyIdentifier keyid,issuer时产生的下级证书如下图。 当没有subjectKeyIdentifier hashauthorityKeyIdentifier keyid,issuer:always时产生的下级证书如下图。其中issuer:always强制加入dirnameserialnum两项。 当没有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