![Каталоги по умолчанию не работают в файле конфигурации OpenSSL](https://rvso.com/image/154454/%D0%9A%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D0%B8%20%D0%BF%D0%BE%20%D1%83%D0%BC%D0%BE%D0%BB%D1%87%D0%B0%D0%BD%D0%B8%D1%8E%20%D0%BD%D0%B5%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%8E%D1%82%20%D0%B2%20%D1%84%D0%B0%D0%B9%D0%BB%D0%B5%20%D0%BA%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D0%B8%20OpenSSL.png)
Я установил каталог в файле /etc/ssl/openssl.cnf, но каждый раз, когда я ввожу команду
openssl req -x509 -newkey rsa:4096 -keyout cakey.pem -out cacert.pem -days 3650
он помещает файлы в корневой каталог каталога, в котором я работаю.
[ CA_default ]
dir = /home/will/myCA # Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept
database = $dir/index.txt # database index file.
#unique_subject = no # Set to 'no' to allow creation of
# several certs with same subject.
new_certs_dir = $dir/newcerts # default place for new certs.
certificate = $dir/cacert.pem # The CA certificate
serial = $dir/serial # The current serial number
crlnumber = $dir/crlnumber # the current crl number
# must be commented out to leave a V1 CRL
crl = $dir/crl.pem # The current CRL
private_key = $dir/private/cakey.pem# The private key
RANDFILE = $dir/private/.rand # private random number file
x509_extensions = usr_cert # The extensions to add to the cert
# Comment out the following two lines for the "traditional"
# (and highly broken) format.
name_opt = ca_default # Subject Name options
cert_opt = ca_default # Certificate field options
# Extension copying option: use with caution.
# copy_extensions = copy
# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
# so this is commented out by default to leave a V1 CRL.
# crlnumber must also be commented out to leave a V1 CRL.
# crl_extensions = crl_ext
default_days = 365 # how long to certify for
default_crl_days= 30 # how long before next CRL
default_md = default # use public key default MD
preserve = no # keep passed DN ordering
# A few difference way of specifying how similar the request should look
# For type CA, the listed attributes must be the same, and the optional
# and supplied fields are just that :-)
policy = policy_match
Если бы каталоги работали, я бы ожидал этого.
Generating a 2048 bit RSA private key
.................................+++
.................................................................................................+++
writing new private key to '/home/will/myCA/private/cakey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
запись нового закрытого ключа в '/home/will/myCA/private/cakey.pem'
Я обновил свою версию OpenSSL прямо с сайта, используя двоичные файлы, и теперь она установлена в /etc/local/ssl. К сожалению, я все еще не понимаю, почему файлы, которые я генерирую с помощью OpenSSL, не сортируются по папкам/каталогам.
Кто-нибудь знает, почему не работают каталоги по умолчанию?
Большое спасибо
Воля
ОБНОВЛЕНИЕ 11:00 30/05/2019
Я выполнил команду
openssl req -x509 -newkey rsa:4096 -days 3650
но он просто печатает ключ в окне терминала и не выводит его в файл.
Я добавил -noout к команде, но файл сохранился в ~privkey.pem, а не в каталоге, который я указал в файле openssl.cnf /home/will/demoCA.
Я заметил, что файл сохраняется в рабочем каталоге, в котором открыт терминал.
при использовании команды openssl version -d
отображается местоположение файла конфигурации по умолчанию, в котором я задаю каталогиOPENSSLDIR: "/usr/local/ssl"
решение1
Файлы, на которые указывает команда [ CA_defaults ]
, используются внутри нее openssl ca
.
Если вы заглянете внутрь, то new_certs_dir
увидите все сертификаты, подписанные ЦС при использовании openssl ca
команды, с именами файлов, состоящими из серийного номера сертификата с .pem
добавленным к нему именем.
В вашем случае openssl req
эти файлы не используются.
На странице руководства по этой req
команде написано следующее:
-out имя файла
Указывает имя выходного файла для записи или стандартный вывод по умолчанию.
Поэтому запись будет производиться в указанный файл, расположенный в каталоге, из которого вы запускаете команду; или в стандартный вывод.
-keyout имя файла
Это дает имя файла для записи нового созданного закрытого ключа. Если эта опция не указана, то используется имя файла, присутствующее в файле конфигурации.
Это приведет к записи в указанное имя файла, опять же расположенного в каталоге, из которого вы запускаете команду; или запись будет произведена в имя файла, указанное в опции default_keyfile
( [ req ]
конечно, ниже).
В обоих случаях вы можете указать абсолютный путь к файлам в своих командах, если вы не хотите, чтобы они помещались в текущий каталог.
Структура, которую вы настроили в .conf
файле, будет работать, когда вы используете openssl ca
команду для подписи запроса от подчиненного (CA или конечного объекта). Однако, чтобы довести ее до стадии, когда вы можете подписывать сертификаты, ей нужны сертификат CA и ключ на месте. Ваша openssl req
команда генерирует их. Чтобы получить разумные значения в сертификате CA, вам нужно добавить больше в свой .conf
файл.
Для начала вам подойдет что-то вроде следующего:
[ req ]
# Don't prompt for the DN, use configured values instead
# This saves having to type in your DN each time.
prompt = no
string_mask = default
distinguished_name = req_dn
# The size of the keys in bits:
default_bits = 4096
[ req_dn ]
countryName = GB
stateOrProvinceName = Somewhere
organizationName = Example
organizationalUnitName = PKI
commonName = Example Test Root CA
[ ca_ext ]
# Extensions added to the request
basicConstraints = critical, CA:TRUE
keyUsage = critical, keyCertSign, cRLSign
Создайте сертификат CA, используя слегка измененную версию предыдущей команды:
openssl req -x509 -newkey rsa:4096 -keyout /home/will/myCA/private/cakey.pem -out /home/will/myCA/cacert.pem -days 3650 -nodes -config <path-to>/openssl.cnf -extensions ca_ext
Примечание: эта опция вам понадобится только -config
в том случае, если вы не используете/не редактируете файл конфигурации по умолчанию.
Если все работает, у вас будет правильный сертификат и ключ для вашей конфигурации CA выше. Прежде чем вы сможете подписать какие-либо сертификаты с помощью команды openssl ca
, вам нужно убедиться, index.txt
что они существуют, и создать их serial
с начальным серийным номером (например, 01
).
OpenSSL — это швейцарский нож криптографии, поэтому у него много вариантов. К сожалению, чтение man-страниц — единственный способ понять его.