如何修改 OpenSSL 证书的 Authority Key Identifier (AKI) 的 KeyID

注意:修改证书的 AKI KeyID 可能会导致证书无效。在进行此操作之前,请务必备份证书文件。

步骤一:提取当前 KeyID

以下命令用于提取证书的当前 AKI KeyID:

openssl x509 -in cert.crt -text -noout | sed 's/\s\+/\n/g' | grep 'issuer:CN=' | sed 's/issuer:CN=//' | openssl x509 -noout -serial | sed 's/serial=//' | sed 's/../&:/g;s/:$//' | xxd -r -g0 | openssl dgst -sha1 -c | sed 's/(stdin)= //' | xxd -r -p | openssl asn1parse -inform der -i | sed -n '/\[0\]/{n;p}' | sed 's/\s\+/\n/g' | sed -n '/^..../{p;q}' | xxd -r -p | xxd -s 2 -c 8 -l 8 -e | awk '{print $2}' | tr '[:upper:]' '[:lower:]' | xxd -r -p | base64

其中,cert.crt 是要修改的证书文件。

步骤二:创建新的 KeyID 文件

以下命令将创建一个名为 authority_key_identifier.bin 的文件,并包含新的 KeyID:

openssl x509 -in cert.crt -text -noout | sed 's/\s\+/\n/g' | grep 'issuer:CN=' | sed 's/issuer:CN=//' | openssl x509 -noout -serial | sed 's/serial=//' | sed 's/../&:/g;s/:$//' | xxd -r -g0 | openssl dgst -sha1 -c | sed 's/(stdin)= //' | xxd -r -p | openssl asn1parse -inform der -i | sed -n '/\[0\]/{n;p}' | sed 's/\s\+/\n/g' | sed -n '/^..../{p;q}' | xxd -r -p | xxd -s 2 -c 8 -l 8 -e | awk '{print $2}' | tr '[:upper:]' '[:lower:]' | xxd -r -p | base64 -d > authority_key_identifier.bin

echo -n 'new_keyid' | xxd -r -p >> authority_key_identifier.bin

new_keyid 替换为所需的新的 KeyID。

步骤三:更新证书

以下命令使用新的 KeyID 更新证书,并将其输出到名为 new_cert.crt 的新证书文件中:

openssl x509 -in cert.crt -extfile <(echo -e "[v3_ca]\nauthorityKeyIdentifier=keyid,issuer\n\n[v3_req]\nkeyUsage=critical,digitalSignature,keyEncipherment\nextendedKeyUsage=serverAuth\nsubjectAltName=@alt_names\n\n[alt_names]\nDNS.1=example.com\nDNS.2=www.example.com") -extensions v3_ca -set_serial 0 -days 365 -out new_cert.crt -signkey cert.key -infiles cert.csr

请将 example.com 替换为证书的实际域名。

最后,使用 new_cert.crt 替换原始的证书文件。

注意:

  • 此操作可能会导致证书无效。请确保备份证书文件。
  • 在更新证书之前,请仔细检查新的 KeyID 是否正确。
  • 建议您在更改证书的 AKI KeyID 之前咨询证书颁发机构(CA)的意见。
如何修改 OpenSSL 证书的 Authority Key Identifier (AKI) 的 KeyID

原文地址: https://www.cveoy.top/t/topic/nwQx 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录