Содержание
Генерация запроса на подпись сертификата вручную (CSR) Использование OpenSSL
Этот урок покажет вам, как вручную создать Запрос на подпись сертификата (или CSR) в среде веб-хостинга Apache или Nginx с использованием OpenSSL. Нажмите здесь для обучения по заказу сертификатов, или здесь для получения дополнительной информации о том, как установить новый сертификат SSL.com.
Чтобы получить дополнительные полезные инструкции и последние новости кибербезопасности, подпишитесь на информационный бюллетень SSL.com здесь:
Видео
В этих инструкциях мы собираемся использовать OpenSSL req
утилита для генерации как закрытого ключа, так и CSR в одной команде. Генерация секретного ключа таким способом гарантирует, что вам будет предложено ввести пароль для защиты закрытого ключа. Во всех приведенных примерах команд замените имена файлов, показанные в ALL CAPS, на фактические пути и имена файлов, которые вы хотите использовать. (Например, вы можете заменить
PRIVATEKEY.key
с /private/etc/apache2/server.key
в среде MacOS Apache.) Это практическое руководство охватывает генерацию обоих RSA и ECDSA ключи.
RSA
Приведенная ниже команда OpenSSL сгенерирует 2048-битный закрытый ключ RSA и CSR:
openssl req -newkey rsa: 2048 -keyout PRIVATEKEY.key -out МОЙCSR.csr
Давайте разберем команду:
openssl
это команда для запуска OpenSSL.req
это утилита OpenSSL для создания CSR.-newkey rsa:2048
сообщает OpenSSL создать новый 2048-битный закрытый ключ RSA.Если вы предпочитаете ключ 4096 бит, вы можете изменить это число на
4096
.-keyout PRIVATEKEY.key
указывает, где сохранить файл закрытого ключа.-out MYCSR.csr
указывает, где сохранить CSR .- С этими двумя последними элементами не забудьте использовать свои собственные пути и имена файлов для закрытого ключа и CSR, а не заполнители.
После ввода команды нажмите вводить, Вам будет представлен ряд подсказок:
- Сначала создайте и подтвердите парольную фразу. Запомните эту парольную фразу, потому что она понадобится вам снова для доступа к вашему секретному ключу.
- Теперь вам будет предложено ввести информацию, которая будет включена в ваш CSR, Эта информация также известна как Отличное имя или DN, Распространенное имя поле обязательно для SSL.
com при отправке вашего CSR, но остальные не являются обязательными. Если вы хотите пропустить дополнительный элемент, просто введите вводить когда это появится:
- Компания Имя страны (необязательно) занимает две буквы код страны.
- Компания Название населенного пункта Поле (необязательно) предназначено для вашего города.
- Компания Название организации поле (необязательно) предназначено для названия вашей компании или организации.
- Компания Распространенное имя поле (обязательное) используется для Полное доменное имя (FQDN) сайта этот сертификат будет защищать.
- Ваш e-mail (опционально)
- Компания Пароль для вызова поле является необязательным и может быть пропущено.
По завершении этого процесса вы вернетесь в командную строку. Вы не получите никакого уведомления о том, что ваш CSR был успешно создан.
Вернуться к началу
ECDSA
Чтобы создать закрытый ключ ECDSA с вашим CSR, вам необходимо вызвать вторую утилиту OpenSSL, чтобы сгенерировать параметры для ключа ECDSA.
Эта команда OpenSSL сгенерирует файл параметров для 256-битного ключа ECDSA:
openssl genpkey -genparam -algorithm ec -pkeyopt ec_paramgen_curve: P-256 -out ECPARAM.pem
openssl genpkey
запускает утилиту openssl для генерации закрытого ключа.-genparam
генерирует файл параметров вместо закрытого ключа. Вы также можете сгенерировать закрытый ключ, но используя файл параметров при генерации ключа и CSR гарантирует, что вам будет предложено ввести пароль.-algorithm ec
определяет алгоритм эллиптической кривой.-pkeyopt ec_paramgen_curve:P-256
выбирает 256-битную кривую. Если вы предпочитаете 384-битную кривую, измените часть после двоеточия наP-384
.-out ECPARAM.
предоставляет путь и имя файла для файла параметров.pem
Теперь укажите ваш файл параметров при создании CSR:
openssl req -newkey ec: ECPARAM.pem -keyout PRIVATEKEY.key -out МОЙCSR.csr
Команда такая же, как мы использовали в примере RSA выше, но -newkey RSA:2048
был заменен на -newkey ec:ECPARAM.pem
, Как и прежде, вам будет предложено ввести пароль и информацию о различающемся имени для CSR.
При желании вы можете использовать перенаправление для объединения двух команд OpenSSL в одну строку, пропуская создание файла параметров, как показано ниже:
openssl req -newkey ec: <(openssl genpkey -genparam -algorithm ec -pkeyopt ec_paramgen_curve: P-256) -keyout PRIVATEKEY.key -out MYCSR.csr
Далее Шаги
Для получения дополнительной информации об установке сертификата см. прочитайте здесь, для привязки к IIS 10, читать здесь.
Генерация сертификатов вручную | Kubernetes
При аутентификации с помощью клиентского сертификата сертификаты можно генерировать вручную с помощью easyrsa
, openssl
или cfssl
.
easyrsa
easyrsa поддерживает ручную генерацию сертификатов для кластера.
Скачайте, распакуйте и инициализируйте пропатченную версию
easyrsa3
.curl -LO https://storage.googleapis.com/kubernetes-release/easy-rsa/easy-rsa.tar.gz tar xzf easy-rsa.tar.gz cd easy-rsa-master/easyrsa3 ./easyrsa init-pki
Создайте новый центр сертификации (certificate authority, CA).
--batch
задает автоматический режим;
--req-cn
указывает общее имя (Common Name, CN) для нового корневого сертификата CA../easyrsa --batch "--req-cn=${MASTER_IP}@`date +%s`" build-ca nopass
Сгенерируйте сертификат и ключ сервера.
Аргумент
--subject-alt-name
задает допустимые IP-адреса и DNS-имена, с которых будет осуществляться доступ к серверу API.MASTER_CLUSTER_IP
обычно является первым IP из CIDR сервиса, который указан в качестве аргумента--service-cluster-ip-range
как для сервера API, так и для менеджера контроллеров. Аргумент--days
задает количество дней, через которое истекает срок действия сертификата. В приведенном ниже примере предполагается, чтоcluster.local
используется в качестве доменного имени по умолчанию../easyrsa --subject-alt-name="IP:${MASTER_IP},"\ "IP:${MASTER_CLUSTER_IP},"\ "DNS:kubernetes,"\ "DNS:kubernetes.default,"\ "DNS:kubernetes.default.svc,"\ "DNS:kubernetes.default.svc.cluster,"\ "DNS:kubernetes.default.svc.cluster.local" \ --days=10000 \ build-server-full server nopass
Скопируйте
pki/ca.crt
,pki/issued/server.crt
иpki/private/server.
в свою директорию.key
Заполните и добавьте следующие параметры в параметры запуска сервера API:
--client-ca-file=/yourdirectory/ca.crt --tls-cert-file=/yourdirectory/server.crt --tls-private-key-file=/yourdirectory/server.key
openssl
openssl поддерживает ручную генерацию сертификатов для кластера.
Сгенерируйте 2048-разрядный ключ ca.key:
openssl genrsa -out ca.key 2048
На основе ca.key сгенерируйте ca.crt (используйте
-days
для установки времени действия сертификата):openssl req -x509 -new -nodes -key ca.key -subj "/CN=${MASTER_IP}" -days 10000 -out ca.crt
Сгенерируйте 2048-битный ключ server.key:
openssl genrsa -out server.key 2048
Создайте файл конфигурации для генерации запроса на подписание сертификата (Certificate Signing Request, CSR).
Замените значения, помеченные угловыми скобками (например,
<MASTER_IP>
), нужными значениями перед сохранением в файл (например,csr.conf
). Обратите внимание, что значение дляMASTER_CLUSTER_IP
– это cluster IP сервиса для сервера API, как описано в предыдущем подразделе. В приведенном ниже примере предполагается, чтоcluster.local
используется в качестве доменного имени по умолчанию.[ req ] default_bits = 2048 prompt = no default_md = sha256 req_extensions = req_ext distinguished_name = dn [ dn ] C = <country> ST = <state> L = <city> O = <organization> OU = <organization unit> CN = <MASTER_IP> [ req_ext ] subjectAltName = @alt_names [ alt_names ] DNS.1 = kubernetes DNS.2 = kubernetes.default DNS.3 = kubernetes.default.svc DNS.4 = kubernetes.default.svc.cluster DNS.5 = kubernetes.default.svc.cluster.local IP.1 = <MASTER_IP> IP.2 = <MASTER_CLUSTER_IP> [ v3_ext ] authorityKeyIdentifier=keyid,issuer:always basicConstraints=CA:FALSE keyUsage=keyEncipherment,dataEncipherment extendedKeyUsage=serverAuth,clientAuth subjectAltName=@alt_names
Сгенерируйте запрос на подписание сертификата, используя файл конфигурации:
openssl req -new -key server.
key -out server.csr -config csr.conf
С помощью ca.key, ca.crt и server.csr сгенерируйте сертификат сервера:
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key \ -CAcreateserial -out server.crt -days 10000 \ -extensions v3_ext -extfile csr.conf -sha256
Используйте следующую команду, чтобы просмотреть запрос на подписание сертификата:
openssl req -noout -text -in ./server.csr
Используйте следующую команду, чтобы просмотреть сертификат:
openssl x509 -noout -text -in ./server.crt
Наконец, добавьте эти параметры в конфигурацию запуска сервера API.
cfssl
cfssl – еще один инструмент для генерации сертификатов.
Скачайте, распакуйте и подготовьте пакеты, как показано ниже.
Обратите внимание, что команды необходимо адаптировать под архитектуру и используемую версию cfssl.
curl -L https://github.
com/cloudflare/cfssl/releases/download/v1.5.0/cfssl_1.5.0_linux_amd64 -o cfssl chmod +x cfssl curl -L https://github.com/cloudflare/cfssl/releases/download/v1.5.0/cfssljson_1.5.0_linux_amd64 -o cfssljson chmod +x cfssljson curl -L https://github.com/cloudflare/cfssl/releases/download/v1.5.0/cfssl-certinfo_1.5.0_linux_amd64 -o cfssl-certinfo chmod +x cfssl-certinfo
Создайте директорию для хранения артефактов и инициализируйте cfssl:
mkdir cert cd cert ../cfssl print-defaults config > config.json ../cfssl print-defaults csr > csr.json
Создайте JSON-конфиг для генерации файла CA (например,
ca-config.json
):{ "signing": { "default": { "expiry": "8760h" }, "profiles": { "kubernetes": { "usages": [ "signing", "key encipherment", "server auth", "client auth" ], "expiry": "8760h" } } } }
Создайте JSON-конфиг для запроса на подписание сертификата (CSR) (например,
ca-csr.
). Замените значения, помеченные угловыми скобками, на нужные.json
{ "CN": "kubernetes", "key": { "algo": "rsa", "size": 2048 }, "names":[{ "C": "<country>", "ST": "<state>", "L": "<city>", "O": "<organization>", "OU": "<organization unit>" }] }
Сгенерируйте ключ CA (
ca-key.pem
) и сертификат (ca.pem
):../cfssl gencert -initca ca-csr.json | ../cfssljson -bare ca
Создайте конфигурационный JSON-файл для генерации ключей и сертификатов для сервера API (например,
server-csr.json
). Замените значения, помеченные угловыми скобками, на нужные.MASTER_CLUSTER_IP
– это cluster IP сервиса для сервера API, как описано в предыдущем подразделе. В приведенном ниже примере предполагается, чтоcluster.local
используется в качестве доменного имени по умолчанию.{ "CN": "kubernetes", "hosts": [ "127.
0.0.1", "<MASTER_IP>", "<MASTER_CLUSTER_IP>", "kubernetes", "kubernetes.default", "kubernetes.default.svc", "kubernetes.default.svc.cluster", "kubernetes.default.svc.cluster.local" ], "key": { "algo": "rsa", "size": 2048 }, "names": [{ "C": "<country>", "ST": "<state>", "L": "<city>", "O": "<organization>", "OU": "<organization unit>" }] }
Сгенерируйте ключ и сертификат для сервера API (по умолчанию они сохраняются в файлах
server-key.pem
иserver.pem
соответственно):../cfssl gencert -ca=ca.pem -ca-key=ca-key.pem \ --config=ca-config.json -profile=kubernetes \ server-csr.json | ../cfssljson -bare server
Распространение самоподписанного сертификата CA
Клиентский узел может отказаться признавать самоподписанный сертификат CA действительным. В случае его использования не в production или в инсталляциях, защищенных межсетевым экраном, самоподписанный сертификат CA можно распространить среди всех клиентов и обновить локальный список действительных сертификатов.
Для этого на каждом клиенте выполните следующие операции:
sudo cp ca.crt /usr/local/share/ca-certificates/kubernetes.crt sudo update-ca-certificates
Updating certificates in /etc/ssl/certs... 1 added, 0 removed; done. Running hooks in /etc/ca-certificates/update.d.... done.
API для сертификатов
Для создания сертификатов x509, которые будут использоваться для аутентификации, можно воспользоваться API certificates.k8s.io
. Для дополнительной информации см. Управление TLS-сертификатами в кластере.
Изменено December 04, 2022 at 4:05 AM PST: [ru] Document generating SHA256 CA certificate (acb7721e8c)
Как сгенерировать самозаверяющий SSL-сертификат с помощью OpenSSL?
Я что-то упустил? Это правильный способ создания самозаверяющего сертификата?
Создать самозаверяющий сертификат очень просто. Вы просто используете команду openssl req
. Может быть сложно создать такой, который сможет использовать самый большой выбор клиентов, таких как браузеры и инструменты командной строки.
Это сложно, потому что браузеры имеют свой собственный набор требований, и они более строгие, чем IETF. Требования, используемые браузерами, задокументированы на форумах CA/Browser (см. ссылки ниже). Ограничения возникают в двух ключевых областях: (1) якоря доверия и (2) DNS-имена.
Современным браузерам (таким как варез, который мы использовали в 2014/2015 годах) нужен сертификат, который связывается с якорем доверия, и они хотят, чтобы DNS-имена представлялись в сертификате определенным образом. И браузеры активно выступают против самоподписанных серверных сертификатов.
Некоторые браузеры не позволяют легко импортировать самозаверяющий сертификат сервера. Фактически, вы не можете использовать некоторые браузеры, такие как браузер Android. Таким образом, полное решение состоит в том, чтобы стать своим собственным авторитетом.
Если вы не становитесь своим собственным авторитетом, вы должны получить правильные DNS-имена, чтобы дать сертификату наибольшие шансы на успех. Но я бы посоветовал вам стать авторитетом для себя. Легко стать авторитетом для себя, и это позволит обойти все проблемы с доверием (кому лучше доверять, чем себе?).
Вероятно, это не тот сайт, который вы ищете!
Сертификат безопасности сайта не является доверенным!
Это связано с тем, что браузеры используют предопределенный список якорей доверия для проверки сертификатов сервера. Самозаверяющий сертификат не связывается с доверенным якорем.
Лучший способ избежать этого:
- Создайте свой собственный центр сертификации (т. е. станьте ЦС)
- Создайте запрос на подпись сертификата (CSR) для сервера
- Подпишите CSR сервера своим ключом ЦС
- Установить сертификат сервера на сервер
- Установите сертификат ЦС на клиенте
Шаг 1 — Создайте свой собственный центр сертификации просто означает создание самозаверяющего сертификата с CA: true
и правильным использованием ключа. значит Субъект и Издатель — это одна и та же сущность, для CA установлено значение true в Basic Constraints (он также должен быть помечен как критический), использование ключа —
keyCertSign
и crlSign
(если вы используете CRL), Идентификатор ключа субъекта (SKI) совпадает с идентификатором ключа органа (AKI).
Чтобы стать собственным центром сертификации, см. *Как подписать запрос на подпись сертификата в своем центре сертификации? о переполнении стека. Затем импортируйте свой ЦС в хранилище доверия, используемое браузером.
Шаги 2–4 примерно соответствуют тому, что вы делаете сейчас для общедоступного сервера, когда подключаете услуги центра сертификации, такого как Startcom или CAcert. Шаги 1 и 5 позволяют вам избежать стороннего авторитета и действовать как собственный авторитет (кому лучше доверять, чем себе?).
Следующий лучший способ избежать предупреждения браузера — доверять сертификату сервера. Но некоторые браузеры, такие как браузер Android по умолчанию, не позволяют вам это сделать. Так что это никогда не будет работать на платформе.
Проблема с браузерами (и другими подобными пользовательскими агентами) , а не , доверяющие самозаверяющим сертификатам, станет большой проблемой в Интернете вещей (IoT). Например, что произойдет, когда вы подключитесь к своему термостату или холодильнику, чтобы запрограммировать его? Ответ: ничего хорошего с точки зрения пользовательского опыта.
Рабочая группа W3C WebAppSec начинает изучать проблему. См., например, Предложение: Маркировка HTTP как небезопасного.
Как создать самозаверяющий сертификат с OpenSSL
Приведенные ниже команды и файл конфигурации создают самозаверяющий сертификат (также показано, как создать запрос на подпись). Они отличаются от других ответов в одном отношении: DNS-имена, используемые для самозаверяющего сертификата, находятся в альтернативном имени субъекта (SAN) , а не в общем имени (CN) .
DNS-имена размещаются в SAN через конфигурационный файл со строкой subjectAltName = @alternate_names
(через командную строку это сделать нельзя). Тогда есть секция alter_names
в конфигурационном файле (настройте на свой вкус):
[ alter_names ] DNS.1 = example.com DNS.2 = www.example.com DNS.3 = mail.example.com DNS.4 = ftp.example.com # Добавьте их, если они вам нужны. Но обычно вы не хотите их или # они нужны в производстве. Они могут понадобиться вам для развития. # DNS.5 = локальный хост # DNS.6 = localhost.localdomain # IP.1 = 127.0.0.1 # IP.2 = ::1
Важно указать DNS-имя в SAN, а не в CN, потому что и как IETF, так и форумы CA/Browser определяют практику. Они также указывают, что DNS-имена в CN устарели (но не запрещены). Если вы помещаете DNS-имя в CN, то оно должно быть включено в SAN согласно политикам CA/B. Таким образом, вы не можете избежать использования альтернативного имени субъекта.
Если вы не поместите DNS-имена в SAN, сертификат не пройдет проверку в браузере и других пользовательских агентах, которые следуют рекомендациям CA/Browser Forum.
Связано: браузеры следуют политикам CA/Browser Forum; а не политики IETF. Это одна из причин, по которой сертификат, созданный с помощью OpenSSL (который обычно следует IETF), иногда не проверяется в браузере (браузеры следуют CA/B). Это разные стандарты, у них разные политики выдачи и разные требования к проверке.
Создайте самозаверяющий сертификат (обратите внимание на добавление опции -x509
):
openssl req -config пример-com.conf -new -x509 -sha256 -newkey rsa:2048 -nodes \ -keyout пример-com.key.pem -days 365 -out пример-com.cert.pem
Создать запрос на подпись (обратите внимание на отсутствие параметра -x509
):
openssl req -config example-com.conf -new -sha256 -newkey rsa:2048 -nodes \ -keyout example-com.key.pem -days 365 -out example-com.req.pem
Печать самоподписанного сертификата :
openssl x509 -in example-com.cert.pem -text -noout
Распечатать запрос на подпись :
openssl req -in example-com.req.pem -text -noout
Файл конфигурации (передается через опцию -config
)
[ req ] биты по умолчанию = 2048 default_keyfile = server-key.pem отличительное_имя = тема req_extensions = req_ext x509_extensions = x509_ext string_mask = только utf8 # DN субъекта может быть сформирован с использованием X501 или RFC 4514 (описание см. в RFC 4519). # Это своего рода мэшап. Например, RFC 4514 не предоставляет адрес электронной почты. [ предмет ] countryName = название страны (двухбуквенный код) countryName_default = США stateOrProvinceName = название штата или провинции (полное название) stateOrProvinceName_default = Нью-Йорк localityName = Название местности (например, город) localityName_default = Нью-Йорк OrganizationName = Название организации (например, компания) организацияName_default = Пример, ООО # Используйте понятное имя, потому что оно представлено пользователю.DNS сервера # имена помещаются в альтернативные имена субъектов. Кроме того, DNS-имена здесь устарели. # как IETF, так и CA/Browser Forums. Если вы разместите здесь DNS-имя, то вы # также должно включать DNS-имя в SAN (в противном случае Chrome и другие # строго следовать базовым требованиям CA/браузера не удастся). commonName = Общее имя (например, полное доменное имя сервера или ВАШЕ имя) commonName_default = Пример компании адрес электронной почты = адрес электронной почты emailAddress_default = [email protected] # Раздел x509_ext используется при создании самоподписанного сертификата. То есть openssl req -x509... [ x509_ext ] subjectKeyIdentifier = хэш authorKeyIdentifier = идентификатор ключа, эмитент # Вам нужна только цифровая подпись ниже. *Если* вы не разрешаете # Передача ключа RSA (т. е. вы используете эфемерные наборы шифров), затем # опустить keyEncipherment, потому что это передача ключей. базовые ограничения = CA:FALSE keyUsage = digitalSignature, keyEncipherment subjectAltName = @alternate_names nsComment = "Сгенерированный сертификат OpenSSL" # RFC 5280, раздел 4.
2.1.12 делает EKU необязательным # CA/базовые требования к браузеру, Приложение (B)(3)(G) меня смущает # В любом случае вам, вероятно, понадобится только serverAuth. # extendedKeyUsage = serverAuth, clientAuth # Раздел req_ext используется при формировании запроса на подпись сертификата. То есть запрос openssl ... [req_ext] subjectKeyIdentifier = хэш базовые ограничения = CA:FALSE keyUsage = digitalSignature, keyEncipherment subjectAltName = @alternate_names nsComment = "Сгенерированный сертификат OpenSSL" # RFC 5280, раздел 4.2.1.12 делает EKU необязательным # CA/базовые требования к браузеру, Приложение (B)(3)(G) меня смущает # В любом случае вам, вероятно, понадобится только serverAuth. # extendedKeyUsage = serverAuth, clientAuth [альтернативные_имена] DNS.1 = example.com DNS.2 = www.example.com DNS.3 = mail.example.com DNS.4 = ftp.example.com # Добавьте их, если они вам нужны. Но обычно вы не хотите их или # они нужны в производстве. Они могут понадобиться вам для развития. # DNS.5 = локальный хост # DNS.
6 = localhost.localdomain # DNS.7 = 127.0.0.1 # IPv6 локальный хост # DNS.8 = ::1
Вам может потребоваться сделать следующее для Chrome. В противном случае Chrome может сообщить, что Common Name недействителен ( ERR_CERT_COMMON_NAME_INVALID
). Я не уверен, какая связь между IP-адресом в SAN и CN в данном случае.
# локальный хост IPv4 # IP.1 = 127.0.0.1 # IPv6 локальный хост # IP.2 = ::1
Существуют и другие правила, касающиеся обработки DNS-имен в сертификатах X.509/PKIX. Обратитесь к этим документам для правил:
- RFC 5280, Internet X.509 Сертификат инфраструктуры открытых ключей и список отозванных сертификатов (CRL) Профиль
- RFC 6125, Представление и проверка удостоверения службы доменных приложений в инфраструктуре открытых ключей Интернета с использованием сертификатов X.509 (PKIX) в контексте безопасности транспортного уровня (TLS)
- RFC 6797, Приложение A, Строгая транспортная безопасность HTTP (HSTS)
- RFC 7469, Расширение для закрепления открытого ключа для HTTP
- Базовые требования форума CA/Browser
- Руководство CA/Browser Forum по расширенной проверке
Перечислены RFC 6797 и RFC 7469, поскольку они имеют более строгие ограничения, чем другие документы RFC и CA/B. RFC 6797 и 7469 также не разрешают IP-адрес.
openssl — не задавать вопрос при создании SSL-сертификата
спросил
Изменено
1 год, 9несколько месяцев назад
Просмотрено
297 раз
Иногда я тестирую веб-сайт SSL на своем локальном компьютере. Я устал использовать самозаверяющий сертификат и добавлять их в свою цепочку ключей на Mac (в браузере или другой ОС). Более того, Chrome всегда на них жалуется. Более того, этот подход немного отличался от того, что использовался в производстве.
Эта статья показалась мне очень полезной: вы один раз создаете свой собственный корневой сертификат ЦС, добавляете его один раз в свою цепочку для ключей, а затем используете закрытый ключ ЦС для подписи тысяч тестовых сертификатов SSL для моих локальных веб-сайтов.
https://deliciousbrains.com/ssl-certificate-authority-for-local-https-development/
Учебник работает отлично, но я хотел бы его автоматизировать. Для корневого сертификата ЦС это было легко, я просто использовал параметр -subj
следующим образом:
openssl req -x509 -new -nodes -key /certs/myCA.key -sha256 -days 1825 -subj "/C= $CA_COUNTRY/ST=$CA_STATE/L=$CA_CITY/O=$CA_ORGANIZATION/CN=$CA_COMMON_NAME" -out /certs/myCA2.pem
где переменная среды (CA_COUNTRY, CA_STATE, CA_CITY, CA_ORGANIZATION, CA_COMMON_NAME) считывается из внешнего файла.
Однако, когда я попытался воспроизвести то же самое для сертификата веб-сайта, я не смог получить тот же результат. Команда следующая:
openssl x509 -req -in dev.deliciousbrains.com.csr -CA myCA.pem -CAkey myCA.key -CAcreateserial -out dev.deliciousbrains.com.crt -days 825 -sha256 -extfile dev. deliciousbrains.com.ext
Кажется, что опция -subj
не работает. Есть ли способ передать приведенную выше информацию этой команде и избежать интерактивных вопросов?
- ssl
- openssl
- ssl-certificate
- x509certificate
Команда, которую вы показываете openssl x509 -req -CA/-CAkey .
не задает никаких вопросов, кроме ключа если вы следовали инструкциям на связанной странице). Это команда , предшествующая , для создания CSR .. которая
openssl req -new
, которая запрашивает имя субъекта и для этого (например, команда для создания сертификата ЦС, которая также ).0007 req , но с -x509
— примечание -x509
не совпадает с x509
) вы можете использовать -subj
. Утверждение на этой странице, что «ваши ответы не имеют значения», не совсем верно; это правда, что когда вы используете SubjectAlternativeName в листовом сертификате, как советует/указывает эта страница, значение Subject игнорируется (по крайней мере) для идентификации HTTPS-сервера, но оно должно (все еще) быть отличным от имени, используемого для CA, чтобы разрешить работу проверки сертификата. Стандарты разрешают, чтобы имя субъекта в листовом сертификате было пустым, когда используется SAN (и пустое всегда отличается от непустого, и в сертификате ЦС требуется непустое имя), но OpenSSL не обрабатывает этот случай.