Генерируем корневой сертификат, подписанный собой.
openssl req -new -newkey rsa:2048 -x509 -nodes -keyout cakey.pem -out cacert.pem -days 3650
Сертификат сроком на 10 лет. Опция -nodes означает не шифровать ключ. Если вы параноик, можете убрать.
Далее генерируем запрос на подпись клиентского сертификата
openssl req -new -newkey rsa:1024 -nodes -keyout client.key -out client.csr
Подписываем его корневым сертификатом
openssl x509 -req -CA cacert.pem -CAkey cakey.pem -days 730 -in client.csr -out client.crt -CAcreateserial
В результате имеем:
Корневой сертификат cacert.pem
Ключ корневого сертификата cakey.pem
Клиентский сертификат client.crt
Ключ клиентского сертификата client.key
Ключи должны быть доступны только администратору, особенно корневой. Им же нужно подписывать дополнительные сертификаты для клиентов.
Чтобы при создании указать параметры CN, OU, etc. можно использовать либо
-subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com"
Либо создать сонфиг openssl.conf содержанием:
countryName = Country Name (2 letter code)
countryName_default = US
countryName_min = 2
countryName_max = 2
0.organizationName = Organization Name (eg, company)
0.organizationName_default = My Company Name LTD.
commonName = Common Name (eg, YOUR name)
commonName_max = 64
commonName_default = ${ENV::CN}
И использовать при вызове параметр
-config openssl.conf
=================
Для установки в nginx:
listen 443 ssl;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_certificate /usr/local/nginx/conf/client.pem;
ssl_certificate_key /usr/local/nginx/conf/client.key;
Взято из http://nginx.org/ru/docs/http/ngx_http_ssl_module.html
----------------
Неинтерактивное создаание CSR:
https://www.shellhacks.com/ru/create-csr-openssl-without-prompt-non-interactive/
-------------------
Ещё один вариант
AWX_WEB_FQDN="awx.yourhost.com"
req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha512 -days 3650 -nodes -subj "/CN=${AWX_WEB_FQDN}/O=${AWX_WEB_F
QDN}"