OpenSSL как CA, не затрагивая среду certs / crl / index / etc - PullRequest
29 голосов
/ 14 октября 2011

Я думаю, что у меня есть правильная команда OpenSSL для подписи сертификата, но я застрял, и учебники, которые я нашел, используют другой формат аргумента (я использую OpenSSL 0.9.8o 01 июня 2010 г.).

openssl ca -cert cert.pem -keyfile key.pem

(закрытый ключ не зашифрован, а CSR находится на стандартном входе.)

выдает эту ошибку

Using configuration from /usr/lib/ssl/openssl.cnf
./demoCA/index.txt: No such file or directory
unable to open './demoCA/index.txt'

Глядя на этот файл конфигурации:

[ ca ]
default_ca = CA_default    # The default ca section

[ CA_default ]
dir      = ./demoCA        # Where everything is kept
certs    = $dir/certs      # Where the issued certs are kepp
crl_dir  = $dir/crl        # Where the issued crl are kept
database = $dir/index.txt  # database index file.

У меня нет этой настройки. Я не хочу ничего настраивать.

Это строго необязательный параметр или есть опция "не беспокоить"?

Я пытался создатьпустые каталоги и файлы, но я запутался.То, что я действительно хочу, чтобы команда, подобная выше, работала, с выводом на стандартный вывод, не касаясь что-нибудь в файловой системе.

Ответы [ 4 ]

31 голосов
/ 14 октября 2011

Я не знаю ни одного варианта «не беспокоить», но вот как вы можете настроить быстрый демонстрационный CA:

#!/bin/bash
CAROOT=/path/to/ca
mkdir -p ${CAROOT}/ca.db.certs   # Signed certificates storage
touch ${CAROOT}/ca.db.index      # Index of signed certificates
echo 01 > ${CAROOT}/ca.db.serial # Next (sequential) serial number

# Configuration
cat>${CAROOT}/ca.conf<<'EOF'
[ ca ]
default_ca = ca_default

[ ca_default ]
dir = REPLACE_LATER
certs = $dir
new_certs_dir = $dir/ca.db.certs
database = $dir/ca.db.index
serial = $dir/ca.db.serial
RANDFILE = $dir/ca.db.rand
certificate = $dir/ca.crt
private_key = $dir/ca.key
default_days = 365
default_crl_days = 30
default_md = md5
preserve = no
policy = generic_policy
[ generic_policy ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
EOF

sed -i "s|REPLACE_LATER|${CAROOT}|" ${CAROOT}/ca.conf

cd ${CAROOT}

# Generate CA private key
openssl genrsa -out ca.key 1024

# Create Certificate Signing Request
openssl req -new -key ca.key  \
                 -out ca.csr       

# Create self-signed certificate
openssl x509 -req -days 10000 \
              -in ca.csr      \
              -out ca.crt     \
              -signkey ca.key

Теперь вы можете генерировать и подписывать ключи:

# Create private/public key pair
openssl genrsa -out server.key 1024

# Create Certificate Signing Request
openssl req -new -key server.key \
                 -out server.csr

# Sign key
openssl ca -config ${CAROOT}/ca.conf   \
           -in server.csr              \
           -cert ${CAROOT}/ca.crt      \
           -keyfile ${CAROOT}/ca.key   \
           -out server.crt
12 голосов
/ 24 октября 2012

Вместо того, чтобы использовать опцию ca, попробуйте опцию x509 с -req.Вы бы добавили -CAfile, чтобы указать свой авторитет.Это подпишет ваш сертификат без добавления записей в индекс.Подробнее об использовании x509 в качестве «мини-CA» можно узнать здесь.

9 голосов
/ 22 июля 2015

Основываясь на ответе snow6oy , вот что я сделал:

openssl x509 -req -CA CACert.pem -CAkey CAKey.pem -CAcreateserial -in YourCSR.csr -out YourCert.pem

Пара дополнительных флагов, которые могут быть полезны:

  • -days 1095
    (по умолчанию 30 дней)

  • -sha256
    (по умолчанию RHEL 7 - SHA-1)

3 голосов
/ 31 декабря 2015

И опции вроде -sha256 -days 1095 не нужны.

openssl x509 -req -in YOUR_CSR.csr -CA YOUR_CA.pem -CAkey YOUR_CA_KEY.pem -CAcreateserial -out YOUR_WANTED.crt
...