OpenSSL - добавление альтернативного имени субъекта (SAN) при подписании с CA
Как добавить дополнительное имя субъекта при подписании запроса сертификата с использованием OpenSSL (в Windows, если это имеет значение)?
Я сгенерировал базовый запрос на подпись сертификата (CSR) из интерфейса IIS. Теперь я хотел бы добавить несколько альтернативных имен субъектов, подписать его существующим корневым сертификатом и вернуть сертификат для завершения запроса на подпись.
Каждое учебное пособие, которое я мог найти, включает в себя создание нового закрытого ключа и нового CSR, однако у меня сложилось впечатление, что закрытый ключ находится на запрашивающем компьютере (к которому у меня не обязательно будет доступ). Я просто хочу подписать запрос при добавлении альтернативных имен. Я относительно плохо знаком с темами OpenSSL и CA, так что это может быть недоразумением с моей стороны.
1 ответ
Лично я добавляю альтернативные имена при генерации CSR, так что я знаю, что это работает (есть небольшой побочный эффект в стандартных файлах conf как для генерации, так и для подписи).
Для последующего изменения, насколько я помню, альтернативные имена являются расширениями, и кажется, что вы можете переопределять или добавлять расширения, которые вы хотите во время подписи. Я буду бесстыдно скопировать:
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
аргумент) и какие расширения использовать (через -extfile
а также -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