Как мне выпустить несколько сертификатов для одного и того же общего имени?

Я создаю центр сертификации для интрасети.

Я создал корневой и промежуточный 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 , который не работает.

6
задан 22 October 2016 в 01:39
2 ответа

Вам нужны дураки? Традиционно браузеры и клиенты требовали, чтобы поле 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 и, глядя на вашу ссылку, очевидно, что они этим пользуются. Или отредактируйте этот файл и удалите строки для тем (ов), которые вы хотите использовать повторно - но в этой ситуации похоже, что у вас есть только один или несколько, и вы хотите использовать его повторно или все, поэтому очистить файл проще.

6
ответ дан 3 December 2019 в 00:15

Если вы хотите создать несколько сертификатов с одним субъектом, вы можете изменить свою конфигурацию следующим образом:

Вы можете изменить в разделе CA (вероятно [CA_default]) в вашем openssl.cnf настройку

unique_subject = no

Но эта настройка также сохранена в файле index.txt.attr, вы должны изменить и эту настройку. Иначе это не сработает.

.
4
ответ дан 3 December 2019 в 00:15

Теги

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