Как отменить сертификат openssl, если у вас нет сертификата
Я сделал сертификат openssl, подписанный CA, созданным на локальной машине.
Этот сертификат был удален, и у меня его больше нет.
Невозможно создать другой сертификат с тем же общим именем, потому что openssl не разрешает его и генерирует ошибку:
failed to update database
TXT_DB error number 2
Как я могу отменить сертификат для создания другого с тем же общим именем?
Ответы
Ответ 1
(На основе ответ Nilesh). В конфигурации по умолчанию openssl сохранит копии всех подписанных сертификатов в /etc/ssl/newcerts
, названный по его номеру индекса. Поэтому grep /etc/ssl/index.txt
, чтобы получить серийный номер ключа, который должен быть отменен, например. 1013, выполните следующую команду:
openssl ca -revoke /etc/ssl/newcerts/1013.pem #replacing the serial number
-keyfile
и -cert
, упомянутые в ответе Nilesh, необходимы только в том случае, если это отклоняется от настроек openssl.cnf
.
В качестве альтернативы вы также можете изменить /etc/ssl/index.txt.attr
на строку
unique_subject = no
чтобы разрешить несколько сертификатов с одним и тем же общим именем. Если вы опубликовали исходный сертификат, то предпочтительным решением является отмена старого, даже если вы не запускаете сервер OSCP или не предоставляете CRL.
Ответ 2
Я не пробовал это, но похоже, что вам нужно что-то вроде этого.
openssl ca -revoke bad_crt_file -keyfile ca_key -cert ca_crt
openssl автоматически сохраняет копию вашего сертификата в каталоге newcerts. Вы можете проверить это, чтобы получить свой сертификат. К сожалению, вам нужен сертификат, чтобы отозвать его. Для получения дополнительной информации см. Следующее: http://www.mad-hacking.net/documentation/linux/security/ssl-tls/revoking-certificate.xml
Ответ 3
Как и в других ответах, openssl CA обычно хранит копию подписанных сертификатов в подкаталоге (newcerts
или certs
, или keys
с easyrsa. Найдите определение new_certs_dir
в файле openssl.cnf вашего органа или -outdir
опция в скриптах).
Таким образом, канонический способ сделать что-то вроде:
openssl ca -config openssl.cnf -revoke newcerts/hello-world.pem
Однако я добавляю этот ответ, чтобы отметить, что в текущих версиях openssl ca -revoke ...
, по-видимому, только обновляет файл index.txt
(тем не менее он запрашивает пароль закрытого ключа, который ставится под сомнение там) так что если у вас действительно нет резервной копии сертификата, но у вас все еще есть index.txt
или какой-либо способ получить серийный номер, вы можете найти/составить строку сертификата и изменить ее:
# before
V 291008172120Z 6DB67443D7E6C2D95D6E2F7F264C05F944964049 unknown /C=FR/CN=coucou.com
# after
R 291008172120Z 191011172218Z 6DB67443D7E6C2D95D6E2F7F264C05F944964049 unknown /C=FR/CN=coucou.com
# Format is 6 fields, tab-separated, and filename is usually 'unknown' :
# CRL does not contain nor need the subject so if unavailable, just make up something close
V/R/E expiration-date revocation-date serial-number filename subject
(протестировано с OpenSSL 1.1.1c. В некоторых других версиях/средах серийный номер может быть намного короче)
openssl ca -config openssl.cnf -gencrl -crldays 30 -out crl.pem
будет фактическим шагом для отзыва сертификата, создавая подписанный список с использованием закрытого ключа органа.