SSL сертификаты. Самоподписанный сертификат

Протокол безопасной передачи данных SSL (Secure Sockets Layer) помимо обеспечения безопасной передачи данных позволяет также реализовать авторизацию клиентов на сервере с помощью клиентских SSL сертификатов.

Процесс авторизация выглядит так. Клиент переходит в закрытую область сайта, веб-сервер запрашивает у браузера клиента сертификат. Если проверка клиентского сертификата прошла удачно, то клиент получает доступ в закрытую часть сайта. 

Порядок создания SSL сертификата

  • Клиент должен создать сертификат, со всеми необходимыми данными.

  • Создать приватный ключ на локальной машине и отправить запрос в центр сертификации (ЦС) на сертификацию сертификата.

  • После обработки запроса, сертификат подписывается секретным ключем ЦС. Клиент имея публичный ключ ЦС, проверяет подлинность сертификата и далее может использовать его.

 Настройка OpenSSL

Отредактируем файл /etc/ssl/openssl.cnf, согласно нашей конфигурации

[ ca ]

default_ca = CA_default # The default ca section

 

[ CA_default ]

dir = /etc/ssl.hostcomm # Where everything is kept

certs = $dir/ssl.crt # Where the issued certs are kept

crl_dir = $dir/ssl.crl # Where the issued crl are kept

database = $dir/index.txt # database index file.

new_certs_dir = $dir/ssl.crt # default place for new certs.

 

certificate = $dir/private/ca.pem # The CA certificate

serial = $dir/serial # The current serial number

crlnumber = $dir/crlnumber # the current crl number

crl = $dir/crl.pem # The current CRL

private_key = $dir/private/ca.key # The private key

RANDFILE = $dir/private/.rand # private random number file

 

x509_extensions = usr_cert # The extentions to add to the cert

 

name_opt = ca_default # Subject Name options

cert_opt = ca_default # Certificate field options

 

default_days = 365 # how long to certify for

default_crl_days= 30 # how long before next CRL

default_md = sha1 # which md to use.

preserve = no # keep passed DN ordering

 

policy = policy_match

 

# For the CA policy

[ policy_match ]

countryName = match

stateOrProvinceName = match

organizationName = match

organizationalUnitName = optional

commonName = supplied

emailAddress = optional

Не забываем создать директории описанные в конфигурационном файле openssl.cnf

А также echo "01" > serial, т. к. пустышка не принимается.

Если вы собираетесь получать подписанный сертификат центром сертификации (ЦС), то нужно отправить запрос к ним. После обработки запроса, сертификат будет подписан на определенный срок.

Если у вас нет сертификата, то можно создать свой ЦС и подписывать сертификаты самостоятельно.

# openssl req -new -x509 -days 365 -config /etc/ssl/openssl.cnf -keyout ca.key -out ca.crt

В результате выполнения команды появятся два файла ca.key и ca.crt.

Создание клиентского приватного ключа и запроса на сертификат (CSR).

Для создания подписанного клиентского сертификата необходимо создать запрос на сертификат, для его подписи.

# openssl req -new -newkey rsa:1024 -nodes -keyout client.key -out client.csr

Client1.csr — есть файл, в котором находится запрос CSR.

Подпишем наш сертификат:

# openssl ca -config openssl.cnf -in client.csr -out client.crt -batch

В результате у нас появится файл клиентского сертификата client.crt.

Описание опций команд openssl:

  • req - запрос на создание нового сертификата

  • -new - создание запроса на сертификат (Certificate Signing Request - далее CSR)

  • -newkey rsa:1024 - будет создан новый закрытый RSA ключ длиной 1024 бита

  • -nodes - не шифровать закрытый ключ

  • -keyout ca.key - закрытый ключ сохранить в файл ca.key

  • -x509 - создать самоподписанный сертификат

  • -days 365 - срок действия сертификата

  • -out ca.crt - сертификат сохранить в файл ca.crt.

Во время создания сертификата нас запрашивают некоторую информацию для создания сертификата:

С - Двухсимвольный код страны (Country) - Не обязательный

ST - Название региона/области/края/республики/… (State Name) - Не обязательный

L - Название города/поселка/… (Locality Name) - Не обязательный

O - Название организации (Organization Name) - Не обязательный

OU - Название отдела (Organization Unit) - Не обязательный

CN - Имя сертификата, при создании серверных сертификатов используется доменное имя сайта (Common Name) - Обязательный

emailAddress - Почтовый адрес (E-mail address) - Не обязательный

Чтобы не вводить эти параметры интерактивно можно использовать опцию -subj:

# openssl req -new -newkey rsa:1024 -nodes -subj /C=RU/O=My\ site/CN=mysite.ru/emailAddress=Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. -keyout client.key -out client.csr

На этом всё.

unix-way