openssl scp

Введение

Как проверить что сеанс установлен именно с тем, с кем вы хотите, что он не был перехвачен или подменен? Для этого оба ваших сертификата, должны быть подписаны третьим лицом, которому вы доверяете.
Так же как подпись документа, удостоверяет что вы согласны с этим документом, подпись открытого сертификата удостоверяет что вы доверяете ему. Таким образом строиться система доверия к сертификатам на предприятиях, и в глобальной сети. А того кто обеспечивает подписание и выдачу сертификатов как сервис, называют - Центр Сертификации или Certificate Authority (CA).

Создание Центра сертификации

openssl

Алгоритм создания Центра сертификации

  1. Создать закрытый ключ Центра сертификации - должен храниться максимально защищенно, и с минимальными правами.
  2. Создать открытый самоподписанный ключ ЦС и указать данные вашего предприятия и срок жизни - данные несут вспомогательную функцию и обеспечивают понимание для людей о принадлежности этого сертификата.

Настройка параметров по умолчанию

Файл /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

Создать сайт

Использовать Apache Nginx

  1. Нужно будет создать несколько имен или несколько сайтов
# apache2
ServerName crl.itnet.kz
ServerAlias aia.itnet.kz
 
# nginx
server_name  crl.itnet.kz aia.itnet.kz;
  1. Создать папку и перекинуть туда ca.crt и ca.crl.
    1. Копирование сертификатов на удаленную машину
    2. Если не на удаленной машине, то команда cp
  2. Добавить запись DNS
  3. Проверить
wget aia.itnet.kz/ca.crt
wget crl.itnet.kz/ca.crl

Создание сертификатов сервера

Алгоритм создания сертификата сервера

Для выдачи сертификатов необходимо выполнить следующие действия:

  1. Создать закрытый ключ сертификата

  2. Создать запрос на подпись сертификата

    1. Заполнить CommonName и другие нужные поля
    2. CommonName должен содержать полное доменное имя вашего сайта
  3. Подписать запрос сертификатом и ключом ЦС


Создание сертификата для сервера

Важно! Когда у вас запросят 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 следует учитывать:

  1. Утилита работает поверх SSH и требует что б его порты были открыты
  2. Для успешной передачи файлов, пользователь которого вы указываете перед 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-certificates
scp ca.crt 192.168.1.1:/usr/local/share/ca-certificates/
update-ca-trust

Если на момент добавления сертификата центра сертификации у вас был запущен браузер. Необходимо его перезапустить