Назад | Перейти на главную страницу

Как автоматически прочитать информацию о сертификате с помощью OpenSSL

Чтобы создать файл сертификата SSL для Apache, Я использую следующую команду:

 openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.cert

И я его вручную кормлю с такими параметрами:

Название страны (двухбуквенный код) [AU]:Австралия
Название штата или провинции (полное название): Мое имя
[Некоторое государство]:Некоторое государство
Название населенного пункта (например, город) []:город
Название организации (например, компания) [Internet Widgits Pty Ltd]:Интернет
Название организационной единицы (например, раздел) []:Раздел
Общее имя (например, полное доменное имя сервера или ВАШЕ имя) []:ваше имя
Адрес электронной почты []:email@gmail.com

Можно ли ввести их из файла или прямо из командной строки OpenSSL с помощью параметров?

На страницах руководства OpenSSL нет никаких подсказок.

Где-то в вашем конфигурационном файле вам понадобится следующее:

[ req ]
prompt                 = no
distinguished_name     = req_distinguished_name

[ req_distinguished_name ]
countryName             = GB
stateOrProvinceName     = Provinceshire
localityName            = Locationsville
organizationName        = Example Ltd
organizationalUnitName  = PKI
commonName              = www.example.com

В prompt = no в [ req ] останавливает отображение запросов и изменяет формат, ожидаемый в distinguished_name раздел. Если у вас нет этой опции, OpenSSL будет ожидать формат подсказок, который у вас есть в данный момент.

Обратите внимание, что порядок полей можно изменять и определяет порядок в сертификате.

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

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.cert -config ./openssl.cnf

В вашем случае вы можете установить следующие параметры:

[ req_distinguished_name ]
# Variable name             Prompt string
#-------------------------    ----------------------------------
0.organizationName          = Organization Name (company)
organizationalUnitName          = Organizational Unit Name (department, division)
emailAddress                = Email Address
emailAddress_max            = 40
localityName                = Locality Name (city, district)
stateOrProvinceName         = State or Province Name (full name)
countryName             = Country Name (2 letter code)
countryName_min             = 2
countryName_max             = 2
commonName              = Common Name (hostname, IP, or your name)
commonName_max              = 64

Больше можно найти на http://www.flatmtn.com/article/setting-openssl-create-certificates#SSLCert-4

Его также можно запустить из сценария:

#!/bin/bash

country=WORLD   
state=mystate    
locality=Mycity   
organization=myorg    
organizationalunit=IT   
email=email@gmail.com

 openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout
 /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.cert -subj
 "/C=$country/ST=$state/L=$locality/O=$organization/OU=$organizationalunit/CN=$commonname/emailAddress=$email"

Нашел по адресу: http://www.jamescoyle.net/how-to/1073-bash-script-to-create-an-ssl-certificate-key-and-request-csr