- Другие полезные команды openssl
- Если нужно добавить поддомен или домен в сертификат
- Запрос ssl сертификата в linux
- Использование ssl-сертификатов для домена
- Как ssl-сертификат помогает защитить данные?
- Как в linux использовать сертификат сгенерированный в windows?
- Как добавить сертификат центра сертификации (ca) в доверенные в linux
- Настройка дополнительных полей ssl сертификата в linux
- Настройка сертификат от letsencrypt
- Подпись ssl сертификата linux в доменном центре сертификации
- Создание запроса на подпись сертификата (csr)
- Ссылки
- Заключение
Другие полезные команды openssl
Создание закрытого ключа:
openssl genrsa -des3 -out domain.key 2048
Создание запроса на основе имеющегося ключа:
openssl req -key domain.key -new -out domain.csr
Просмотр сертификата:
openssl req -text -noout -verify -in domain.csr
Генерация паролей с помощью openssl:
openssl rand -base64 9
Если нужно добавить поддомен или домен в сертификат
Если забыли добавить поддомен ( ну скажем www — это как пример), или может, понадобилось добавить поддомен для какой-то нужды, то я сейчас покажу как можно это сделать:
Запрос ssl сертификата в linux
После того как отредактировали файл создаем ключ и запрос в одной команде:
openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr
Эта команда создаст файл закрытого ключа типа rsa длиной 2048 бит. Вы можете изменить эти параметры по своему усмотрению. Далее последует диалог, в котором необходимо указать основные поля сертификата.

Обратите внимание на поле Common Name такое же имя стоит прописать в конфиге выше в качестве одного из полей в alt_names.
Если пришло время и вы обновляете сертификат, то выпустить запрос можно получив информацию из существующего сертификата:
openssl x509 -in domain.crt -signkey domain.key -x509toreq -out domain.csr
Использование ssl-сертификатов для домена
Для использования сертификата доменом, для которого он был создан, необходимо соответствующим образом настроить виртуальный хост этого домена. Для начала нужно сохранить файлы *.crt и *.key где-нибудь, где доступ к ним может получить только их владелец.
SSLCertificateFile /home/john/ssl/certs/server.crt SSLCertificateKeyFile /home/john/ssl/private/server.key
Как ssl-сертификат помогает защитить данные?
На самом деле схема защиты трафика основана на его шифровании открытым ключом и его расшифровке закрытым ключом. Понятие SSL-сертификата применимо в контексте подтверждения того факта, что открытый ключ действительно принадлежит именно тому домену, с которым происходит соединение. Таким образом, в данной схеме присутствуют две составляющие:
- Пара ключей (открытый и закрытый) — для шифрования/расшифровки трафика;
- Подпись открытого ключа. Гарантирующая, что он подлинный и обслуживает именно тот домен, для которого и был создан.
Обе эти составляющие и представляют собой то, что принято обозначать понятием SSL-сертификат. Подпись является гарантией, поскольку выдаётся авторитетным центрами сертификации. Это доступные всем онлайн-сервисы (достаточно воспользоваться любой поисковой системой), которым можно отправить свой ключ, заполнив соответствующую анкету.
Далее сервис (центр сертификации) обрабатывает данные из анкеты и сам ключ и высылает уже подписанный ключ обратно его владельцу. Среди самых популярных на сегодняшний день центров сертификации являются такие как Comodo.Важно заметить, что зашифрованный открытым ключом трафик возможно расшифровать только соответствующим ему закрытым ключом.
Как в linux использовать сертификат сгенерированный в windows?
День добрый. Пытаюсь установить с помощью PHP в Ubuntu 14.10 подключение к одному SOAP-сервису. Что было сделано:
Фрагмент документации:
Создание и настройка сертификатов
Для самостоятельного создания сертификата выполните следующие действия:
1. Выполните следующую команду для создания сертификата:
makecert.exe -n “CN=name” -ss My -r -m 120 -pe -sky exchange -a sha1
2. С помощью оснастки «Сертификаты» экспортируйте созданный сертификат в .cer файл и отправьте его на адрес, предоставленной службы технической поддержки.
3. С помощью оснастки «Сертификаты» импортируйте файл сертификата в «Доверенные лица» (Trusted people).
Теперь у меня имеется эта пара сертификатов *.cer. Моё затруднение в том, чтобы понять, как этими сертификатами воспользоваться. Пытался создавать стандартный SoapClient указывая в настройках присланный мне сертификат конвертированный в pem-формат, соединение молчком отваливается по таймауту.
Попытался отправить запрос с помощью curl без soap-клиента, тогда уже вернулась ошибка о подписи и безопасности. Насколько помню (давно воюю) я взял сертификат сгенерированный на нашей стороне в Windows, извлёк из него открытый и закрытый ключ в pem-формате, указал их в настройках curl с помощью CURLOPT_SSH_PUBLIC_KEYFILE и CURLOPT_SSH_PRIVATE_KEYFILE, указал сертификат присланный техподдержкой сервиса в pem-формате с помощью CURLOPT_SSLCERT, но всё равно ошибка та же.
Ранее приходилось работать только с сертификатами от crypto, но там помимо сертификаты присылали ещё шесть файлов ключей и приходилось делать подмену библиотеки, чтобы использовать курл от криптопро, но как я понимаю, здесь не тот случай.
Вообще, как я понимаю, для подключения нужно использовать открытый и закрытый ключ той машины, на который генерировался сертификат, он же ведь подтверждает только пару этой машины?
Ещё пытался запускать скрипт получив доступ к той машине в windows в которой генерировался сертификат, предварительно добавив его с помощью оснастки в доверенные, но получил те же самые ошибки о подписи и безопасности. “An error occurred when verifying security for the message.”
Направьте меня пожалуйста на путь истинный.
Как добавить сертификат центра сертификации (ca) в доверенные в linux
Как добавить корневой сертификат в доверенные в Linux на уровне системы
Сертификат с расширением .crt можно открыть двойным кликом и просмотреть его содержимое:
Если вы работаете в системе от обычного пользователя (не root), то кнопка «Импортировать» будет недоступна.
Чтобы разблокировать кнопку «Импортировать», выполните следующую команду:
sudo gcr-viewer /ПУТЬ/ДО/СЕРТИФИКАТА.crtНапример:
sudo gcr-viewer ./HackWareCA.crtДанный способ может не сработать, поэтому рассмотрим, как добавить доверенные корневые центры сертификации в командной строке.
Суть метода очень проста:
Добавить свой корневой CA сертификат в папку, предназначенную для таких сертификатов.
Запустить программу для обновления общесистемного списка сертификатов.
Пути и команды в разных дистрибутивах Linux чуть различаются.
Просмотреть Subject всех корневых CA сертификатов можно уже знакомой командой:
awk -v cmd='openssl x509 -noout -subject' ' /BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crtДля демонстрации я добавлю сертификат с Common Name, включающим «HackWare», тогда для проверки, имеется ли сертификат с таким именем среди корневых CA, я могу использовать команду:
awk -v cmd='openssl x509 -noout -subject' ' /BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt | grep -i HackWareДля добавления своего корневого CA в доверенные в Debian, Kali Linux, Linux Mint, Ubuntu и их производных:
1. Проверьте, существует ли директория /usr/local/share/ca-certificates:
ls -l /usr/local/share/ca-certificatesЕсли её ещё нет, то создайте:
sudo mkdir /usr/local/share/ca-certificatesСертификат должен быть в формате PEM (обычно так и есть) и иметь расширение .crt — если расширение вашего сертификата .pem, то достаточно просто поменять на .crt.
2. Скопируйте ваш сертификат командой вида:
sudo cp СЕРТИФИКАТ.crt /usr/local/share/ca-certificates/Например:
sudo cp ./HackWareCA.crt /usr/local/share/ca-certificates/3. Запустите следующую команду для обновления общесистемного списка:
sudo update-ca-certificatesПример вывода:
Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...Adding debian:HackWareCA.pem
done.
done.
Проверим наличие нашего CA сертификата среди доверенных:
awk -v cmd='openssl x509 -noout -subject' ' /BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt | grep -i HackWareСертификат успешно найден:
Чтобы его удалить:
sudo rm /usr/local/share/ca-certificates/СЕРТИФИКАТ.crt
sudo update-ca-certificatesДля добавления своего корневого CA в доверенные в Arch Linux, BlackArch и их производных:
1. Выполните команду вида:
sudo cp ./СЕРТИФИКАТ.crt /etc/ca-certificates/trust-source/anchors/Например:
sudo cp ./HackWareCA.crt /etc/ca-certificates/trust-source/anchors/2. Обновите общесистемный список доверенных CA:
sudo update-ca-trustЧтобы удалить этот сертификат:
sudo rm /etc/ca-certificates/trust-source/anchors/СЕРТИФИКАТ.crt
sudo update-ca-trustДобавление сертификатов в базу данных NSS
Некоторые приложения используют базу данных NSS, и у вас может быть необходимость добавить доверенные CA в неё.
Последующие изменения повлияют только на приложения, использующие базу данных NSS и учитывающие файл /etc/pki/nssdb.
1. Сначала создайте структуру каталогов для системных файлов базы данных NSS:
sudo mkdir -p /etc/pki/nssdbЗатем создайте новый набор файлов базы данных. Пароль нужен для того, чтобы базу данных могли редактировать только люди, которые его знают. Если все пользователи в системе (и с доступом к резервным копиям) заслуживают доверия, этот пароль можно оставить пустым.
sudo certutil -d sql:/etc/pki/nssdb -N2. Убедитесь, что файлы базы данных доступны для чтения всем:
sudo chmod go r /etc/pki/nssdb/*Примечание: вышеприведённые инструкции применимы только в том случае, если пока не существует общесистемного набора файлов базы данных NSS. Если он уже существует, то важно знать пароль для этого набора баз данных (конечно, если он защищён паролем).
3. Теперь, когда доступны файлы базы данных NSS, добавьте сертификат в хранилище следующим образом:
sudo certutil -d sql:/etc/pki/nssdb -A -i ФАЙЛ-СЕРТИФИКАТА.crt -n "ИМЯ-СЕРТИФИКАТА" -t "C,,"Например:
sudo certutil -d sql:/etc/pki/nssdb -A -i ./HackWareCA.crt -n "HackWare CA" -t "C,,"Биты доверия, используемые в приведённом выше примере, помечают сертификат как надёжный для подписи сертификатов, используемых для связи SSL/TLS. Имя (указывается после опции -n), используемое в команде, можно выбрать любое, но убедитесь, что его легко отличить от других сертификатов в магазине.
Для проверки:
certutil -L -d /etc/pki/nssdbАналогичные инструкции можно использовать для включения сертификата только в базу данных NSS конкретного пользователя:
certutil -d sql:$HOME/.pki/nssdb -A -i ФАЙЛ-СЕРТИФИКАТА.crt -n "ИМЯ-СЕРТИФИКАТА" -t "C,,"Удаление из файлов базы данных NSS
Чтобы удалить сертификат из любой базы данных NSS, используйте команду certutil следующим образом. В этом примере используется общесистемное расположение базы данных NSS, но его можно легко изменить на пользовательское ~/.pki/nssdb местоположение.
sudo certutil -d sql:/etc/pki/nssdb -D -n "certificateName"Как добавить корневой сертификат в доверенные в Linux в веб браузеры
Chrome, Chromium, Firefox и созданные на их основе веб браузеры доверяют корневым сертификатам, установленным на уровне системы. То есть вам достаточно добавить в доверенные CA сертификат как это показано в предыдущем разделе.
Причём эти браузеры хотя и используют NSS, они игнорируют общесистемные сертификаты NSS, которые можно добавить в файл /etc/pki/nssdb!
Тем не менее приложения, которые используют NSS (такие как Firefox, Thunderbird, Chromium, Chrome) хранят свои списки доверенных сертификатов в файлах cert9.db. Чтобы добавить свой сертификат в каждый из этих файлов можно использовать скрипт.
Сохранить следующий код в файл CAtoCert9.sh:
#!/bin/bash
certfile="root.cert.pem"
certname="My Root CA"
for certDB in $(find ~/ -name "cert9.db")
do
certdir=$(dirname ${certDB});
certutil -A -n "${certname}" -t "TCu,Cu,Tu" -i ${certfile} -d sql:${certdir}
doneВ этом файле измените значение certfile на имя файла вашего сертификата и значение certname на имя вашего сертификата, сохраните и закройте файл.
Затем запустите его следующим образом:
bash ./CAtoCert9.shВ результате в домашней папке пользователя будут найдены все файлы cert9.db и в каждый из них будет добавлен указанный CA сертификат.
Вы можете добавить CA сертификаты в графическом интерфейсе каждого браузера.
- В настройках Chrome: Конфиденциальность и безопасность → Безопасность → Настроить сертификаты → Центры сертификации
- В настройках Chromium: Конфиденциальность и безопасность (выбрать «Ещё») → Настроить сертификаты → Центры сертификации
Нажмите кнопку «Импорт»:
Выберите файл с сертификатом.
Укажите, какие полномочия вы даёте этому сертификату:
- В настройках Firefox: Приватность и Защита → Сертификаты → Просмотр сертификатов → Центры сертификации:
Нажмите кнопку «Импортировать»:
Выберите файл с сертификатом.
Укажите, какие полномочия вы даёте этому сертификату:
Для глубокого понимания OpenSSL смотрите также полное руководство: «OpenSSL: принципы работы, создание сертификатов, аудит».
Настройка дополнительных полей ssl сертификата в linux
Первым делом необходимо настроить список и значения дополнительных полей в сертификате, а именно Subject Alternative Names. Указывать их необходимо, чтобы избежать ошибки [missing_subjectAltName] и NET::ERR_CERT_COMMON_NAME_INVALID в Google Chrome и других браузерах. В данных полях необходимо перечислить все dns имена и ip адреса, по которым может быть открыт сайт.
Задаются параметры через файл /etc/ssl/openssl.cnf. Если у вас данный конфигурационный файл не изменялся то необходимо внести следующие изменения:
- В разделе [req] добавить строку: req_extensions = v3_req
- В разделе [v3_req] добавить строку: subjectAltName = @alt_names
- Создать раздел [ alt_names ] и добавить в него все альтернативные имена в формате:
Настройка сертификат от letsencrypt
Можно использовать данный сертификат на различных веб-сервера, но в данной статье — я приведу несколько примеров.
Чтобы получить помощь, можно использовать:
Подпись ssl сертификата linux в доменном центре сертификации
Копируем содержимое csr файла в буфер, затем идем на веб сайт доменного центра сертификации.

В поле шаблон сертификата выбираем Веб-сервер и кликаем по кнопке «Выдать».

Кликаем по ссылке «Загрузить сертификат» и сохраняем файл сертификата. После этого его можно загрузить на сервер и настроить на использование вебсервером.
Поскольку доменный центр сертификации по умолчанию распространяет свой корневой сертификат на все машины в домене Active Directory, либо вы сделали это с помощью GPO, то все подписанные им сертификаты на машинах в домене будут валидными. Таким образом и SSL сертификат в Linux подписанный доменным центром сертификации прикрученный к внутрикорпоративному веб-серверу тоже не вызовет ошибок в браузере на рабочей машине пользователя.
Данная инструкция пригодится при выпуске сертификата например для установки на Proxmox Mail Gateway или любой другой веб-сервер.
Создание запроса на подпись сертификата (csr)
Вне зависимости от того получаете ли вы сертификат от CA или создаете самоподписаный, первым шагом будет создание ключа.
Если сертификат будет использоваться системными сервисами такими, как Apache, Postfix, Dovecot и т.п., уместно создать ключ без пароля. Отсутствие пароля позволяет сервису стартовать с минимальным ручным вмешательством, обычно это предпочтительный вариант запуска сервиса.
В этой секции показано как создать ключ с кодовым словом (паролем) и без него. Беспарольный ключ затем будет использован для создания сертификата, который можно использовать для различных системных сервисов.
Запуск вашего защищенного сервиса без кодовой фразы удобен потому, что вам не потребуется вводить ее при каждом старте данного сервиса. Однако это небезопасно и компрометация ключа будет означать и компрометацию сервера.
Для генерации ключей CSR запроса, запустите следующую команду из терминала:
openssl genrsa -des3 -out server.key 2048
Generating RSA private key, 2048 bit long modulus .......................... ....... e is 65537 (0x10001) Enter pass phrase for server.key:
Теперь вы можете ввести вашу кодовую фразу. Для лучшей безопасности рекомендуется использовать не менее восьми символов. Минимальная длина при использовании -des3 – 4 символа. Фраза должна включать цифры и/или знаки препинания и не должно быть словом из словаря. Также не забывайте, что ваша фраза будет чувствительна к регистру.
Повторите ввод для проверки. В случае корректного ввода ключ сервера будет создан и записан в файл server.key.
Теперь создадим небезопасный ключ, без кодовой фразы и поменяем имена ключей:
openssl rsa -in server.key -out server.key.insecure mv server.key server.key.secure mv server.key.insecure server.key
Небезопасный ключ теперь называется server.key и вы можете использовать его для создания CSR без кодовой фразы.
Для создания CSR выполните следующую команду в терминале:
openssl req -new -key server.key -out server.csr
У вас будет запрошена кодовая фраза (при использовании ключа с паролем – прим. пер.). Если введена корректная фраза, у вас запросят название компании, имя сайта, email и пр. Как только вы введете все эти подробности, будет создан запрос CSR и сохранен в файл server.csr.
Теперь вы можете оправить CSR файл в центр сертификации для обработки. CA использует этот файл для выпуска сертификата. С другой стороны, вы можете создать и самозаверенный сертификат, используя этот же CSR.
Ссылки
Для более детальных инструкций по использованию криптографии смотрите SSL Certificates HOWTO на tlpd.org.
Страница Википедии HTTPS содержит больше относительно HTTPS.
Для дополнительной информации по OpenSSL смотрите домашнюю страницу OpenSSL.
Также хорошее глубокое руководство Network Security with OpenSSL от O’Reilly.
<-назад |
далее->
Заключение
В заключение следует заметить, что генерация и подключение SSL-сертификатов к домену — далеко не самая сложная задача. Однако она требует очень внимательного выполнения отдельных её этапов, поскольку от ошибки зависит безопасность для домена.
