Во время поиска я нашел несколько способов подписать запрос на подпись сертификата SSL:
Используя
x509
модуль:openssl x509 -req -days 360 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt
Используя
ca
модуль:openssl ca -cert ca.crt -keyfile ca.key -in server.csr -out server.crt
Примечание: я не уверен в использовании правильных параметров для этого. Пожалуйста, посоветуйте правильное использование, если я хочу его использовать.
Каким образом следует подписывать запросы на сертификаты в вашем центре сертификации? Один метод лучше, чем другой (например, один не рекомендуется)?
ca
это для случаев, когда вы более серьезно относитесь к тому, чтобы стать CA.Ответы:
Вы пропускаете прелюдию к этим командам.
Это двухступенчатый процесс. Сначала вы настраиваете свой CA, а затем подписываете сертификат конечного объекта (он же сервер или пользователь). Обе эти команды объединяют два шага в один. И оба предполагают, что у вас уже есть файл конфигурации OpenSSL, уже настроенный как для ЦС, так и для сертификатов сервера (конечного объекта).
Сначала создайте базовый файл конфигурации :
Затем добавьте следующее:
Поля выше взяты из более сложного
openssl.cnf
(вы можете найти его в/usr/lib/openssl.cnf
), но я думаю, что они необходимы для создания сертификата CA и закрытого ключа.Настройте поля выше на свой вкус. Значения по умолчанию экономят ваше время от ввода той же информации при экспериментировании с файлом конфигурации и параметрами команды.
Я опустил материал, относящийся к CRL, но ваши операции CA должны иметь их. Смотрите
openssl.cnf
и соответствующийcrl_ext
раздел.Затем выполните следующее.
-nodes
Опускает пароль или ключевую фразу , вы можете проверить сертификат. Это действительно плохая идея, чтобы опустить пароль или фразу-пароль.После выполнения команды
cacert.pem
будет вашим сертификатом для операций CA иcakey.pem
будет закрытым ключом. Напомним, закрытый ключ не имеет пароля или парольной фразы.Вы можете сбросить сертификат с помощью следующего.
И проверьте его назначение с помощью следующего (не беспокойтесь о
Any Purpose: Yes
; см. «Критический, CA: FALSE», но «Any Purpose CA: Yes» ).Для второй части я собираюсь создать другой файл конфигурации, который легко усваивается. Во- первых, (вы можете сделать один из них для пользовательских сертификатов также).
touch
openssl-server.cnf
Затем откройте его и добавьте следующее.
Если вы разрабатываете и хотите использовать свою рабочую станцию в качестве сервера, вам может потребоваться выполнить следующие действия для Chrome. В противном случае Chrome может пожаловаться на неправильное общее имя (
ERR_CERT_COMMON_NAME_INVALID
) . Я не уверен, какова связь между IP-адресом в SAN и CN в этом случае.Затем создайте запрос сертификата сервера. Обязательно пропустите
-x509
*. Добавление-x509
создаст сертификат, а не запрос.После выполнения этой команды у вас будет запрос
servercert.csr
и закрытый ключserverkey.pem
.И вы можете проверить это снова.
Затем вы должны подписать его с вашим CA.
Вы почти готовы подписать сертификат сервера вашим центром сертификации. Центру сертификации
openssl-ca.cnf
нужно еще два раздела, прежде чем вводить команду.Сначала откройте
openssl-ca.cnf
и добавьте следующие два раздела.Во-вторых, добавьте следующее в
[ CA_default ]
разделopenssl-ca.cnf
. Я оставил их раньше, потому что они могут усложнить вещи (они не использовались в то время). Теперь вы увидите, как они используются, так что, надеюсь, они будут иметь смысл.В-третьих, коснитесь
index.txt
иserial.txt
:Затем выполните следующее:
Вы должны увидеть следующее:
После выполнения команды вы получите свежеиспеченный сертификат сервера
servercert.pem
. Закрытый ключ был создан ранее и доступен вserverkey.pem
.Наконец, вы можете проверить свой свежеиспеченный сертификат следующим образом:
Ранее вы добавили следующее
CA_default
:copy_extensions = copy
. Это расширение копии, предоставленное лицом, делающим запрос.Если вы пропустите это
copy_extensions = copy
, то у вашего сертификата сервера будут отсутствовать альтернативные имена субъектов (SAN), такие какwww.example.com
иmail.example.com
.Если вы используете
copy_extensions = copy
, но не просматриваете запрос, то запрашивающая сторона может заставить вас подписать что-то вроде подчиненного корня (а не сертификата сервера или пользователя). Это означает, что он / она сможет чеканить сертификаты, которые возвращаются к вашему доверенному корню. Не забудьте подтвердить запросopenssl req -verify
до подписания.Если вы опустите
unique_subject
или установите егоyes
, то вам будет разрешено создать только один сертификат под отличительным именем субъекта.Попытка создать второй сертификат во время эксперимента приведет к следующему при подписании сертификата вашего сервера с помощью закрытого ключа ЦС:
Так
unique_subject = no
что идеально подходит для тестирования.Если вы хотите убедиться, что Имя организации соответствует самозаверяющим ЦС, Подведомственному ЦС и сертификатам конечных объектов , добавьте следующее в файлы конфигурации ЦС:
Если вы хотите разрешить изменение имени организации , используйте:
Существуют и другие правила обработки имен DNS в сертификатах X.509 / PKIX. Обратитесь к этим документам для правил:
RFC 6797 и RFC 7469 перечислены, потому что они более строгие, чем другие документы RFC и CA / B. RFC 6797 и 7469 также не допускают IP-адреса.
источник
openssl req
используется для генерации CSR,openssl req -x509
используется для генерации сертификата CA (я видел в другом месте, где вы также можете создать самоподписанный сертификат),openssl ca
используется для подписи CSR с сертификатом CA. Правильно? Что меня смущает, так это то, что одни и те же части файла openssl.cnf используются с разными значениями в зависимости от команды ... Я думаю, что теперь я полностью потерян.openssl req -x509
используется для создания CA. Во-вторых,openssl req
используется для создания CSR сервера. В-третьих,openssl ca
используется для создания сертификата сервера и его сертификации с помощью подписи ЦС.openssl-ca.cnf
иopenssl-server.cnf
. После того, как вы привыкнете к ним и к тому, как будут вызываться разделы, вы можете объединить их в чудовищное подобиеopenssl.cnf
.В дополнение к ответу @jww я хотел бы сказать, что конфигурация в openssl-ca.cnf,
определяет число дней по умолчанию, в течение которого сертификат, подписанный этим root-ca, будет действительным. Чтобы установить действительность самого root-ca, вы должны использовать опцию '-days n' в:
В противном случае ваш root-ca будет действителен только один месяц по умолчанию, а срок действия любого сертификата, подписанного этим корневым центром сертификации, также будет равен одному месяцу.
источник