Вопрос или проблема
У меня есть экземпляр EC2, для которого я пытаюсь заставить работать локальный wget.
У меня есть собственный набор ключей CA, crt, pem, который я использую для подписания сертификатов запросов моей компании, и он работает хорошо. На веб-сервере (AWS EC2) у меня есть стандартный слушатель Apache2, который обрабатывает весь TLS. Затем я загружаю CA в браузер, и всё работает нормально.
Я даже могу сделать это:
sudo openssl verify -CAfile myCA.pem internal.crt
internal.crt: OK
Так что я знаю, что всё в порядке. Теперь мне нужно написать код и вызвать wget вот так:
wget https://internal.com
Ответ:
--2021-10-10 18:13:34-- https://internal.com/
Разрешение internal.com (internal.com)... x.x.x.x
Подключение к internal.com (internal.com)|x.x.x.x|:443... подключено.
ОШИБКА: не удается проверить сертификат internal.com, выданный ‘CN=myCA,OU=IT,O=myOrg CA,ST=FL,C=US’:
Невозможно локально подтвердить полномочия удостоверяющего центра.
ОШИБКА: нет совпадения альтернативного имени сертификата с
запрашиваемым именем хоста ‘internal.com’.
Я следовал некоторым инструкциям по добавлению моего CA в Ubuntu, и я сделал это: взято с (https://askubuntu.com/questions/73287/how-do-i-install-a-root-certificate)
sudo mkdir /usr/local/share/ca-certificates/extra
sudo cp myCA.crt /usr/local/share/ca-certificates/extra/myCA.crt
sudo dpkg-reconfigure ca-certificates
Это выход:
Обновление сертификатов в /etc/ssl/certs...
rehash: предупреждение: пропуск myCA.pem, он не содержит точно одного сертификата или CRL
1 добавлено, 0 удалено; готово.
Обработка триггеров для ca-certificates (20210119ubuntu0.21.04.1) ...
Обновление сертификатов в /etc/ssl/certs...
0 добавлено, 0 удалено; готово.
Запуск хуков в /etc/ca-certificates/update.d...
готово.
готово.
После выполнения вышеуказанного в папке /etc/ssl/certs есть myCA.pem, но это символическая ссылка на myCA.crt
myCA.pem -> /usr/local/share/ca-certificates/extra/myCA.crt
И .pem указывает на .crt, это не может быть правильно, не так ли? Есть какие-нибудь предложения?
Расширение файла .pem
не делает его файлом формата PEM, то же самое касается расширения .crt
(и любого расширения в общем на Unix системах).
Я столкнулся с этой проблемой на Debian, когда пытался импортировать сертификаты формата DER. Я конвертировал все сертификаты в формат PEM, выполнив:
openssl x509 -inform der -in infile.cer -out outfile.cer
Затем выполнение команды sudo update-ca-certificates
прошло успешно.
Это сообщение указывает на проблему:
rehash: предупреждение: пропуск myCA.pem, он не содержит точно одного сертификата
myCA.pem
содержит более одного сертификата. Разделите файл на отдельные файлы, вы можете назвать их myCA-1.pem
, myCA-2.pem
и т.д. Поместите их в /usr/local/share/ca-certificates/extra/
и повторно выполните sudo dpkg-reconfigure ca-certificates
Тогда вы увидите /etc/ssl/certs
, содержащий хэши, символически ссылающиеся на ваши файлы сертификатов, и wget
должен работать как ожидалось.
lrwxrwxrwx 1 root root 13 Jul 13 10:40 6242745b.0 -> myCA-2.pem
Ответ или решение
Чтобы добавить самоподписанный корневой сертификат CA в Ubuntu 21.04, выполните следующие шаги. Этот процесс позволит вашему EC2 инстансу корректно обрабатывать запросы через wget, обеспечивая безопасность соединений с использованием TLS.
Шаг 1: Подготовка сертификата
Убедитесь, что у вас есть ваш файл сертификата CA в формате PEM. Файл должен выглядеть как единичный сертификат. Если ваш файл содержит несколько сертификатов, вы должны разбить его на несколько отдельных файлов. Для этого используйте текстовый редактор, чтобы отделить каждый сертификат и сохранить их в отдельные файлы, например, myCA-1.pem
, myCA-2.pem
и так далее.
Шаг 2: Копирование сертификата в правильную директорию
- Откройте терминал на вашем EC2 инстансе.
- Создайте директорию для дополнительных сертификатов, если она еще не создана:
sudo mkdir -p /usr/local/share/ca-certificates/extra
- Скопируйте ваши сертификаты в эту директорию:
sudo cp myCA-*.pem /usr/local/share/ca-certificates/extra/
Шаг 3: Обновление сертификатов
После того как сертификаты скопированы, необходимо обновить систему сертификатов:
sudo dpkg-reconfigure ca-certificates
При выполнении данной команды вы должны увидеть сообщение о том, что сертификаты обновляются. Убедитесь, что в выводе не отображаются ошибки, такие как "skipping [certificate]", которые указывали бы на наличие проблем с Certifikate Formats.
Шаг 4: Проверка
После того как процесс завершен, вы можете проверить, правильно ли установлены сертификаты:
ls -l /etc/ssl/certs | grep myCA
Вы должны увидеть символические ссылки на ваши файлы сертификатов.
Шаг 5: Использование wget
Попробуйте снова выполнить команду wget:
wget https://internal.com
Если все шаги выполнены правильно, вы должны успешно получить ответ от сервера без ошибок.
Примечание
Если ошибка все еще появляется, убедитесь, что в вашем сертификате присутствует правильный "Subject Alternative Name" (SAN), соответствующий internal.com
. В противном случае вы можете столкнуться с проблемами, связанными с идентификацией сертификата в контексте вашего окружения.
Вывод
Следуя вышеуказанным шагам, вы сможете установить самоподписанный корневой сертификат CA на Ubuntu 21.04, что позволит корректно использовать протокол wget для безопасных соединений. Убедитесь, что сертификаты правильно форматированы и находятся в соответствующей директории, чтобы избежать проблем в дальнейшем.