Самоподписный доверенный сертификат (Certificate Authority или CA) необходим для подписи серверных и клиентских сертификатов, для их проверки при авторизации вашим веб-сервером.
Создаем самоподписанный сертификат и ключ.
openssl req -new -newkey rsa:1024 -nodes -keyout ca.key -x509 -days 365\
-subj/C=RU/ST=Msc/L=Msk/O=ItFree/OU=User/CN=it-free.ru/emailAddress=info@it-free.ru -out ca.crt
Описание аргументов:
req
запрос на создание нового сертификата.
-new
создание запроса на сертификат (CSR).
-newkey rsa:1024
создаем закрытый RSA ключ длиной 1024 бита, длина ключа по Вашему усмотрению.
-nodes
не шифровать закрытый ключ
-keyout ca.key
сохраняем ключ в файл ca.key.
-x509
вместо создания запроса на сертификат, создаем самоподписанный сертификат.
-days 350
срок действия сертификата 350 дней.
-subj/C=RU/ST=Msc/L=Msk/O=ItFree/OU=User/CN=it-free.ru/emailAddress=info@it-free.ru -out ca.crt
параметры:
С - код страны (Country).
ST - название региона/области/края/республики/... (StateName).
L - название города/поселка/... (LocalityName).
O - название организации (OrganizationName).
OU - название отдела (OrganizationUnit).
CN - имя сертификата, при создании серверных сертификатов используется доменное имя сайта, для клиентских
сертификатов может быть использовано что угодно (CommonName). Обязательный параметр.
emailAddress - почтовый адрес (E-mail address).
Создаем зашифрованный ключ и запрос на сертификат
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
Подпишем запрос и получим сертификат
openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt
Если не хотите чтобы веб-сервер спрашивал пароль после перезагрузки
openssl rsa -in server.key -out server.nopass.key
Найдите в настройках Вашего веб-сервера соответствующую запись для вашей защищаемой страницы и поместите следующие строки
SSLCACertificateFile /path/to/youcakey/ca.crt
<Directory /path/to/web/>
SSLVerifyClient require
SSLRequireSSL
</Directory>
Создаем файл ca.config
[ ca ]
default_ca = CA_CLIENT # использовать секцию CA_CLIENT
[ CA_CLIENT ]
dir = ./db # рабочий каталог
certs = $dir/certs # каталог для создаваемых сертификатов
new_certs_dir = $dir/newcerts # каталог для новых сертификатов
database = $dir/index.txt # база данных подписанных Вами сертификатов
serial = $dir/serial # серийный номер сертификата в шестнадцатиричном формате
certificate = ./ca.crt # файл сертификата CA
private_key = ./ca.key # файл закрытого ключа CA
default_days = 365 # срок действия подписываемого сертификата
default_crl_days = 7 # срок действия CRL
default_md = md5 # алгоритм подписи
policy = policy_anything # название секции с описанием политики в отношении данных сертификата
[ policy_anything ]
countryName = optional # поля optional - не обязательны, supplied - обязательны
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = optional
emailAddress = optional
Создаем рабочие каталоги и файлы указанные в ca.config
mkdir db
mkdir db/certs
mkdir db/newcerts
touch db/index.txt
echo "01" > db/serial
Создаем шифрованный ключ и запрос на сертификат
openssl req -new -newkey rsa:1024 -nodes -keyout client01.key\
-subj /C=RU/ST=Msc/L=Msc/O=ItFree/OU=User/CN=Client01/emailAddress=info@it-free.ru -out client01.csr
Подписываем запрос и создаем сертификат
openssl ca -config ca.config -in client01.csr -out client01.crt -batch
Для раздачи сертификата клиента создаем p12 с паролем q1w2e3
openssl pkcs12 -export -in client01.crt -inkey client01.key -certfile ca.crt -out client01.p12 -passout pass:q1w2e3