Введение
Как проверить что сеанс установлен именно с тем, с кем вы хотите, что он не был перехвачен или подменен? Для этого оба ваших сертификата, должны быть подписаны третьим лицом, которому вы доверяете.
Так же как подпись документа, удостоверяет что вы согласны с этим документом, подпись открытого сертификата удостоверяет что вы доверяете ему. Таким образом строиться система доверия к сертификатам на предприятиях, и в глобальной сети. А того кто обеспечивает подписание и выдачу сертификатов как сервис, называют - Центр Сертификации или Certificate Authority (CA).
Создание Центра сертификации
Алгоритм создания Центра сертификации
- Создать закрытый ключ Центра сертификации - должен храниться максимально защищенно, и с минимальными правами.
- Создать открытый самоподписанный ключ ЦС и указать данные вашего предприятия и срок жизни - данные несут вспомогательную функцию и обеспечивают понимание для людей о принадлежности этого сертификата.
Настройка параметров по умолчанию
Файл /etc/ssl/openssl.cnf
[CA_default]
dir = /ca # Директория для сертификатов
certificate = $dir/ca.crt # Сертификат имя поменять
private.key = $dir/private/ca.key # Ключ. имя поменять
[policy_match]
countryName = optional
[req_distinguished_name]
countryName_default = KZ
stateOrProvinceName_default = QST
localityName_default = Qostanay
0.organizationName_default = VM
organizationalUnitName_default = IT
[ usr_cert ]
crlDistributionPoints = URI:http://crl.itnet.kz/ca.crl
authorityInfoAccess = OCSP;URI:http://aia.itnet.kz/Root-CA.crtСоздание файлов [CA_default]
cat /etc/ssl/openssl.cnf | grep CA_default -A 20 # посмотреть что создавать
mkdir certs crl newcerts private
touch index.txt
echo 01 > crlnumber
echo 01 > serialСоздание самоподписаного сертификата CA
# Генерация закрытого ключа
openssl genrsa -out ca.key
# -out ca.key - где и как назвать файл
# genrsa - генерация закрытого ключа RSA
# openssl - фигня для криптографии
#--------------------------------------------#
# Генерация открытого, самоподписанного ключа
openssl req -x509 -new -key ca.key -out ca.crt
# -req - используется для создания запросов на подпись сертификата (CSR)
# и cамоподписанных сертификатов. Не понятно вообще.
# -x509 - это стандартный формат сертификата с открытым ключом.
# -new - запрос на создание сертефиката
# -key ca.key - использовать ключ ca.key
# -out ca.crt - где и как назвать сетрификат
# при вводе команды потребует много чего заполнять
# Common Name (eg, your name or your server's hostname) []:My CA
# Остальные параметры можно оставить пустымиПросмотр созданного сертификата
Для просмотра вашего сертификата используйте следующую команду:
openssl x509 -in ca.crt -text -noout Создание crl сертификата
openssl ca -gencrl -out ca.crl
# отзыв сертификата
openssl ca -revoke test.crtСоздать сайт
- Нужно будет создать несколько имен или несколько сайтов
# apache2
ServerName crl.itnet.kz
ServerAlias aia.itnet.kz
# nginx
server_name crl.itnet.kz aia.itnet.kz;- Создать папку и перекинуть туда ca.crt и ca.crl.
- Копирование сертификатов на удаленную машину
- Если не на удаленной машине, то команда cp
- Добавить запись DNS
- Проверить
wget aia.itnet.kz/ca.crt
wget crl.itnet.kz/ca.crlСоздание сертификатов сервера
Алгоритм создания сертификата сервера
Для выдачи сертификатов необходимо выполнить следующие действия:
-
Создать закрытый ключ сертификата
-
Создать запрос на подпись сертификата
- Заполнить CommonName и другие нужные поля
- CommonName должен содержать полное доменное имя вашего сайта
-
Подписать запрос сертификатом и ключом ЦС
Создание сертификата для сервера
Важно! Когда у вас запросят CommonName напишите полное доменное имя вашего сайта
openssl genrsa -out vm.test.key
openssl req -new -key vm.test.key -out vm.test.req
openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in vm.test.req -out vm.test.crt
# Common Name (eg, your name or your server's hostname) []:vm.test
# Остальные параметры можно оставить пустыми
# Diffie-Hellman - для OpenVPN
openssl dhparam -out dh.pem 2048Если в результате выполнения последней команды получили это:
Signature ok
subject=/C=KZ/ST=QST/L=Qostanay/O=VM/OU=IT/CN=vm.test
Getting CA Private KeyЗначит сертификат подписан успешно
Файл gen.sh
файл для генерации сертификатов подписанных сервером
!!! Называй файлы как в DNS !!! DNS.itnet.kz = DNS
openssl genrsa -out /ca/private/$1.key
echo "subjectAltName = DNS:$1.itnet.kz" > /ca/altname.txt
echo "crlDistributionPoints = URI:http://crl.itnet.kz/ca.crl" >> /ca/altname.txt
echo "authorityInfoAccess = OCSP;URI:http://aia.itnet.kz/ca.crt" >> /ca/altname.txt
openssl req -key /ca/private/$1.key -new -out /ca/newcerts/$1.req
openssl ca -in /ca/newcerts/$1.req -out /ca/certs/$1.crt -extfile /ca/altname.txt
# sh gen.sh $test
# где $test имя файлаsubjectAltName можно несколько если через запятую то есть.
echo "subjectAltName = DNS:$1.itnet.kz, DNS:site.itnet.kz " > /ca/altname.txt
Копирование сертификатов на удаленную машину
Передача сертификата
Для защищенной передачи файлов и целых каталогов между Linux хостами, вы можете использовать утилите scp, имеющую следующий синтаксис:
# Копирование файла на удаленную машину
scp ca.crt user@192.168.1.1:/home/user/
# ^- подключение будет происходить от имени пользователя user
# Копирование каталога и вложенных в него файлов
scp -r data user@192.168.1.1:/home/user/
# Копирование с удаленной машины
scp user@192.168.1.1:/opt/test_file ./При использовании утилиты scp следует учитывать:
- Утилита работает поверх SSH и требует что б его порты были открыты
- Для успешной передачи файлов, пользователь которого вы указываете перед IP адресом должен иметь доступ на запись в этот каталог
Generate SubCA
openssl genrsa -out services.key
# Делаем запрос
openssl req -new -key services.key -out services.req
# Подписываем его без использования CA_default в openssl
openssl ca -in services.req -extensions v3_ca -out services.crt
Добавление сертификата в доверенные
/usr/local/share/ca-certificatesscp ca.crt 192.168.1.1:/usr/local/share/ca-certificates/
update-ca-trustЕсли на момент добавления сертификата центра сертификации у вас был запущен браузер. Необходимо его перезапустить