|
4 Краткий отчет о практике (приложение 1). Строки с таким выделением
Создание SSL-сертификатов Теперь создадим SSL сертификаты для TLS. Лучше всего (хотя и не обязательно) создать вначале свой CA (Certificate Authority), а потом подписать от его имени все сертификаты (нам еще понадобятся сертификаты для dovecot). В этом случае клиентам нужно будет добавить доверие к этому CA, а не каждому сертификату отдельно.
Создаем CA.
Создадим папку, в которой будем генерить все сертификаты
mkdir /CA_clean
Нам нужно вначале подготовить конфигурационный файл для создания CA
nano ca.conf
[req]
distinguished_name =req_distinguished_name
x509_extensions = v3_ca
prompt = no
[req_distinguished_name]
C= RU
ST = Moscow Region
L = Moscow
O = AAA Ltd.
OU = ROOTCA
CN = aaa.ru
emailAddress = admin@aaa.ru
[v3_ca]
basicConstraints = CA:true
nsComment = "CA certificate of AAA Ltd."
nsCertType = sslCA, emailCA
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer:always
[ usr_cert ]
nsComment = "Certificate issued by AAA Ltd."
;nsBaseUrl = http://ca.aaa.ru/
;nsRevocationUrl = http://ca.aaa.ru/crl.crl
;issuerAltName = URI:http://ca.aaa.ru/ca.crt
;crlDistributionPoints = URI:http://ca.aaa.ru/crl.crl
Здесь и далее (замените на нужное Вам):
C = RU (страна)
ST = Moscow Region (регион)
L = Moscow (город)
O = AAA Ltd. (название компании)
CN = aaa.ru (имя сервера, для которого выдается ключ; в случае CA - имя домена)
emailAddress = admin@aaa.ru (почтовый адрес администратора)
(закоментаренные строки нужны только, если Вы действительно хотите иметь более-менее нормальный CA с листами отзыва ключей и т.п., но это выходит за рамки этого how-to)
Создаем частный ключ ключ CA
sudo openssl genrsa -des3 -out ca.key 4096
Enter pass phrase for ca.key:
Введите пароль для файла ca.key (два раза для подтверждения) и не забывайте его!
Verifying - Enter pass phrase for ca.key:
Он будет нужен для подписывания всех ключей (здесь используем sudo т.к. при этом переписывается состояние random_state компьютера)
Создаем открытый ключ CA. Мы говорим, что ключи нашего CA имеют «срок жизни» 10 лет (-days 3650).
openssl req -new -x509 -nodes -sha1 -days 3650 -key ca.key -out ca.crt -config ca.conf
Enter pass phrase for ca.key:
(вводим выбранный нами на предыдущем шаге пароль закрытого ключа CA)
Создаем сертификат для подписывания:
openssl pkcs12 -export -in ca.cer -inkey ca.key -out ca.pfx
Создадим директорию, в которой у нас будут лежать все ключи для всех серверов (если мы в дальнейшем будем создавать и подписывать ключи для других серверов; например, захотим, чтобы ключи были разные для smtp.aaa.ru pop3.aaa.ru и imap.aaa.ru) и, соответственно, директории для всех имен серверов (в нашем случае — oban.aaa.ru)
mkdir SERVERS
mkdir SERVERS/oban.aaa.ru
Создаем файлы конфигураций для ключей серверов (в каждой директории - свой файл, т.к. в нем записано имя сервера). В случае одного имени (замените на нужные Вам значения):
nano SERVERS/oban.aaa.ru/openssl.conf
[ req ]
default_bits = 2048
distinguished_name = req_distinguished_name
prompt = no
req_extensions = v3_req
[ req_distinguished_name ]
C = RU
ST = Moscow Region
L = Moscow
O = AAA Ltd.
CN = oban.aaa.ru
emailAddress = admin@aaa.ru
[ v3_req ]
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
Теперь сгенерим ключи для нашего сервера (заметьте, что мы опять используем здесь sudo):
sudo openssl genrsa -passout pass:1234 -des3 -out SERVERS/oban.aaa.ru/server.key.1 2048
Здесь 1234 — парольная фраза для промежуточного ключа. Она нам нужна только временно, т.к. мы в результате хотим получить ключ без пароля (требование postfix).
Убираем из ключа парольную фразу:
openssl rsa -passin pass:1234 -in SERVERS/oban.aaa.ru/server.key.1 -out SERVERS/oban.aaa.ru/server.key
Генерим запрос на подпись нашего ключа
openssl req -config SERVERS/oban.aaa.ru/openssl.conf -new -key SERVERS/oban.aaa.ru/server.key -out SERVERS/oban.aaa.ru/server.csr
и удаляем промежуточный ключ
rm -f SERVERS/oban.aaa.ru/server.key.1
Теперь нам нужно подписать наш созданный ключ от имени своего CA
Сделаем конфигурационный файл для подписи (срок действия подписи 5 лет - 1828 дней):
nano sign.config
[ ca ]
default_ca = CA_own
[ CA_own ]
certs = .
new_certs_dir = ca.db.certs
database = ca.db.index
serial = ca.db.serial
RANDFILE = ca.db.rand
certificate = ca.crt
private_key = ca.key
default_days = 1825
default_crl_days = 1
default_md = sha1
preserve = no
policy = policy_anything
x509_extensions = usr_cert
[ policy_anything ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[usr_cert]
basicConstraints = CA:false
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer:always
и создадим директорию для хранения сертификатов подписей:
mkdir ca.db.certs
Для первого подписанного ключа создаем его номер и формируем индексный файл (для остальных - не нужно!)
echo '01' > ca.db.serial
cp /dev/null ca.db.index
и подписываем (обратите внимание, что мы опять используем sudo)
sudo openssl ca -batch -config sign.config -out SERVERS/oban.aaa.ru/server.crt -infiles SERVERS/oban.aaa.ru/server.csr
Enter pass phrase for ca.key:
(введем пароль закрытого ключа CA)
Проверим подпись (на всякий случай):
openssl verify -CAfile ca.crt SERVERS/oban.aaa.ru/server.crt
Мы должны получить
SERVERS/oban.aaa.ru/server.crt: OK
Номер ключа и индексный файл автоматически обновились, удалим старые файлы
rm -f ca.db.serial.old
rm -rf ca.db.index.old
Скопируем ключи в директорию /etc/ssl
sudo cp SERVERS/oban.aaa.ru/server.key /etc/ssl/private/oban.key
sudo cp SERVERS/oban.aaa.ru/server.crt /etc/ssl/certs/oban.crt
и сменим права доступа к закрытому ключу
sudo chmod og= /etc/ssl/private/oban.key
Теперь установим доверие к новому CA. Для этого создадим папку для него
sudo mkdir /usr/share/ca-certificates/aaa
и скопируем туда наш сертификат CA
sudo cp ca.crt /usr/share/ca-certificates/aaa/
После этого переконфигурируем наши корневые сертификаты
sudo dpkg-reconfigure ca-certificates
(ответим, что мы хотим доверять новым сертификатам и выберем в списке наш новый сертификат для активации)
Нашим клиентам, которые будут связываться с нашим сервером с использованием шифрования (TLS, SSL) или с нашим веб-сервером по протоколу HTTPS нужно установить доверие к нашему CA. Тем или иным способом передайте им открытый ключ нашего CA - ca.crt.
Внимание! Никогда никому не передавайте созданные приватные ключи *.key и не делайте их доступными!
|
|
|