Ssl-Certificate

OpenSSL - 使用 CA 簽名時添加主題備用名稱 (SAN)

  • April 16, 2018

如何在使用 OpenSSL 簽署證書請求時添加主題備用名稱(如果重要,在 Windows 中)?

我已經從 IIS 介面生成了一個基本的證書籤名請求 (CSR)。現在,我想添加幾個主題備用名稱,使用現有的根證書對其進行簽名,然後返回證書以完成簽名請求。

我能找到的每個教程都涉及生成一個新的私鑰和一個全新的 CSR,但是我的印像是私鑰駐留在請求電腦上(我不一定有權訪問)。我只想在添加備用名稱時簽署請求。我對 OpenSSL 和 CA 主題比較陌生,所以這可能是我的誤解。

就我個人而言,我在 CSR 生成時添加了 alt 名稱,所以我知道這是可行的(預設 conf 文件中存在一些用於生成和簽名的副作用)。

對於之後的更改,據我所知,Alt Names 是副檔名,似乎您可以在簽名時覆蓋或添加所需的副檔名。我會無恥地複制:

From: Patrick Patterson @carillonis.com
Newsgroups: mailing.openssl.users
Subject: Re: Sign CSR after modifying data in CSR possible?
Date: Tue, 5 Jan 2010 15:14:05 -0500
Message-ID: <mailpost.1262722567.7762451.82829.mailing.openssl.users@FreeBSD.cs.nctu.edu.tw>

當你使用 openssl CA(奇怪的是:openssl ca)命令時,你可以給它很多選項,包括使用哪個 Subject 值(-subj參數),以及使用哪個擴展(通過-extfileand-extensions參數)。

因此您可以通過以下命令設置所需的副檔名和所需的主題(導致 CSR 中的兩個值都被完全忽略):

openssl ca -config /etc/myca/openssl.cnf                       \
   -extfile /etc/myca/openssl-exts.cnf                        \
   -extension sig-medium                                      \
   -subj "/C=CA/O=Example Company/OU=Engineering/CN=John Doe" \
   -in req.csr                                                \
   -out john-doe.pem

在哪裡:

/etc/myca/openssl-exts.cnf 包含:

[ sig-medium ]
basicConstraints                = CA:FALSE
keyUsage                        = critical, digitalSignature
extendedKeyUsage                = emailProtection, anyExtendedKeyUsage
nsComment                       = "Do Not trust - PURE TEST purposes only"
subjectKeyIdentifier            = hash
authorityKeyIdentifier          = keyid,issuer
subjectAltName                  = @testsan
authorityInfoAccess             = @aia_points
crlDistributionPoints           = @crl_dist_points

[ testsan ]
email = test...@example.com
DNS = www.example.com
dirName = test_dir
URI = http://www.example.com/
IP = 172.16.0.1
otherName.0 = 1.3.6.1.4.1.311.20.2.3;UTF8:test@kerberose-domain.internal
otherName.1 = 1.3.6.1.5.5.7.8.7;IA5STRING:_mail.example.com
otherName.2 = 1.3.6.1.5.5.7.8.5;UTF8:testuser@im.example.com

[aia_points]
caIssuers;URI.0=http://www.example.com/caops/Signing-CA.p7c
caIssuers;URI.1=ldap://dir.example.com/<DN of Signing 
CA>?cACertificate;binary?base?objectclass=pkiCA

[crl_dist_points]
URI.0=http://www.example.com/caops/test-signca1-crl.crl
URI.1=ldap://dir.example.com/<DN of Signing 
CA>?certificateRevocationList;binary?base?objectclass=pkiCA

引用自:https://serverfault.com/questions/779475