Я создаю центр сертификации для интрасети.
Я создал корневой и промежуточный CA и успешно подписал сертификат сервера, используя промежуточный CA. В сертификате сервера указано CN = mysite.com
.
В будущем срок действия этого сертификата сервера истечет, и мне нужно будет выпустить новый. Однако, если я создам другой CSR с тем же CN = mysite.com
, то, когда я его подпишу, я получаю
failed to update database
TXT_DB error number 2
Эта ошибка исчезнет, если я создам новый CSR с другим CN, но у CN есть быть таким же, иначе браузер не скажет, что он действителен, верно?
Как мне это исправить?
РЕДАКТИРОВАТЬ: Я следую этому руководству - все ' все нормально до конца связанной страницы, но когда я пытаюсь повторить шаги на этой странице для создания второго сертификата, openssl требует, чтобы я дал новому сертификату другой CN.
SUBJ="/C=$C/ST=$ST/L=$L/O=$O/OU=$OU/CN=$CN"
# Generate CSR
echo "$PW" | openssl req \
-config "$CAROOT/intermediate/openssl.cnf" \
-new -sha256 -subj "$SUBJ" -passin stdin \
-key "$PRIV_ENC" -out "$CSR_INT" >/dev/null 2>&1 ||
{
>&2 echo "Could not openssl req";
exit 1;
}
# Sign CSR
openssl ca \
-config "$CAROOT/intermediate/openssl.cnf" \
-batch -extensions server_cert \
-days "$HTTP_DAYS" -notext -md sha256 \
-in "$CSR_INT" -out "$CRT_INT" ||
{
>&2 echo "Could not openssl ca";
exit 1;
}
Это openssl ca
, который не работает.
Вам нужны дураки? Традиционно браузеры и клиенты требовали, чтобы поле CommonName имени субъекта совпадало с именем хоста; современные предпочитают, чтобы это делала запись в расширении SubjectAlternativeName (SAN) . Вы можете настроить другие поля , чтобы они отличались друг от друга, например,
O=Floo Manufacturing, OU=floo server 2016, CN=www.floo.example.com
O=Floo Manufacturing, OU=floo server 2017, CN=www.floo.example.com
и DN субъектов уникальны, хотя CommonName само по себе не является.
Или с современными клиентами вы можете поместить www.floo.example.com
в SAN и использовать уникальные объекты без CommonName вообще. Но заставить openssl выполнять per-cert SAN немного неудобно; см. например https://security.stackexchange.com/questions/113484/followup-to-one-liner-to-create-cert-request-with-san
Чтобы разрешить дублирование: официальный способ
В вашем файле конфигурации (который представляет собой $ CAROOT / intermediate / openssl.cnf
) перейдите в «раздел» (разделенный строками вида [somename]
с необязательный пробел) для вашего CA . Поскольку вы не использовали -name
в командной строке, имя раздела - это значение default_ca
в разделе [ca]
или в разделе по умолчанию (в верх перед первой строкой [somename]
); глядя рядом с вашей ссылкой, вероятно, это [CA_default]
. Добавьте строку
unique_subject=no
с интервалом и после # комментарий
необязательно. Или, если у вас уже есть строка для этого элемента, измените и / или раскомментируйте ее, но, глядя рядом со своей ссылкой, вы, вероятно, этого не сделаете.
См. Справочную страницу ca (1ssl)
в вашей системе или ] в Интернете в разделе ОПЦИИ ФАЙЛА КОНФИГУРАЦИИ.
Чтобы разрешить дублирование: неофициальный способ
Очистите (усеките) настроенный файл базы данных
, который обычно является index.txt
и, глядя на вашу ссылку, очевидно, что они этим пользуются. Или отредактируйте этот файл и удалите строки для тем (ов), которые вы хотите использовать повторно - но в этой ситуации похоже, что у вас есть только один или несколько, и вы хотите использовать его повторно или все, поэтому очистить файл проще.
Если вы хотите создать несколько сертификатов с одним субъектом, вы можете изменить свою конфигурацию следующим образом:
Вы можете изменить в разделе CA (вероятно [CA_default]
) в вашем openssl.cnf
настройку
unique_subject = no
Но эта настройка также сохранена в файле index.txt.attr
, вы должны изменить и эту настройку. Иначе это не сработает.