fruworg
@fruworg

[OpenSSL/PowerShell] Как создать промежуточный сертификат?

Привет, Хабр!
Нужно дерево сертификатов (корневой -> промежуточный -> клиент).
Как создать корневой и сертификат клиента я разобрался, а вот промежуточный - нет.
Ниже прилагаю команды и конфиг.

Команды:
# корневой сертификат
.\openssl genrsa -out "root.key"
.\openssl req -x509 -new -nodes -key "root.key" -sha256 -days 1024 -out "root.crt" -config "cnf.cnf" -subj "/C=country/ST=state/L=city/O=corp/OU=unit/CN=name/emailAddress=name@domain"

# тут должен быть промежуточный...

# серверный
.\openssl genrsa -out "server.key"
.\openssl req -new -key "server.key" -out "server.csr" -config "cnf.cnf"
.\openssl x509 -req -in "server.csr" -CA "intermediate.crt" -CAkey "intermediate.key" -CAcreateserial -out "server.crt" -extensions v3_req -extfile "cnf.cnf" -subj "/C=country/ST=state/L=city/O=corp/OU=unit/CN=name/emailAddress=name@domain"

# экспортирую серверный сертификат
.\openssl pkcs12 -export -in "server.crt" -inkey "server.key" -out "server.p12" -password pass:"xxXX1234"

# клиента
.\openssl genrsa -out "client.key"
.\openssl req -new -key "client.key" -out "client.csr" -config "cnf.cnf"
.\openssl x509 -req -in "client.csr" -CA "intermediate.crt" -CAkey "intermediate.key" -CAcreateserial -out "client.crt" -extensions v3_req -extfile "cnf.cnf" -subj "/C=country/ST=state/L=city/O=corp/OU=unit/CN=name/emailAddress=name@domain"

# экспортирую всё
.\openssl pkcs12 -export -in "server.crt" -inkey "server.key" -in "client.crt" -inkey "client.key" -in "intermediate.crt" -inkey "intermediates.key" -in "root.crt" -inkey "root.key" -out out.p12 -password pass:"password"


Конфиг:
[ ca ]
default_ca = CA_default

[ CA_default ]
default_days = 36500
default_md  = sha256
preserve = no
email_in_dn  = no
nameopt = default_ca
certopt = default_ca
policy = policy_match

[ policy_match ]
commonName = supplied
countryName = optional
stateOrProvinceName = optional
organizationName = optional
organizationalUnitName = optional
emailAddress = optional

[ req ]
input_password = xxXX1234
prompt = no
distinguished_name  = kostil
default_bits = 2048
default_keyfile = priv.pem
default_md = sha256
req_extensions = v3_req
encyrpt_key = no

[ kostil ]
commonName = KOSTIL'

[ v3_ca ]
basicConstraints = CA:TRUE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer:always

[ v3_req ]
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = $dns
IP.1 = $ip
  • Вопрос задан
  • 518 просмотров
Решения вопроса 1
fruworg
@fruworg Автор вопроса
Команды:
write-output "01" | out-file -append -encoding ASCII "serial"
out-file -append -encoding utf8 "index"

.\openssl genrsa -out "intermediate.key"
.\openssl req -new -sha256 -config "cnf.cnf" -key "intermediate.key" -out "intermediate.csr" 
.\openssl ca -config "cnf.cnf" -extensions v3_intermediate_ca -days 2650 -batch -in "intermediate.csr" -out "intermediate.crt"


В конфиг добавить:
[ CA_default ]
certs = ./
serial = serial
database = index
new_certs_dir = ./
certificate = root.crt
private_key = root.key

[ v3_intermediate_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true, pathlen:0
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
subjectAltName = @alt_names


Или воспользуйтесь скриптом:
https://p.sicp.me/dst6M
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@MaxKozlov Куратор тега PowerShell
Не знаю, каким боком тут powershell, но гайдов в сети полно.
Вот, например
https://jamielinux.com/docs/openssl-certificate-au...
или покороче
https://dadhacks.org/2017/12/27/building-a-root-ca...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы