証明書に署名するための適切なOpenSSLコマンドがあると思いますが、行き詰まってしまい、見つけたチュートリアルでは別の引数形式を使用しています(OpenSSL 0.9.8o 01 Jun 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.
私はこれを設定していません。 これを設定したくありません。
厳密に必要ですか、それとも「気にしないでください」というオプションはありますか?
空のディレクトリとファイルを作成しようとしましたが、もつれました。私が本当に望んでいるのは、上記のようなコマンドが機能し、ファイルシステムの何かに触れることなく、標準出力に出力することです。
「気にしない」オプションは知りませんが、簡単なデモ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
Caオプションを使用するのではなく、-reqを指定してx509オプションを試してください。権限を指すように-CAfileを追加します。これにより、インデックスにエントリを追加せずに証明書に署名します。ここでは、x509を「ミニCA」として使用する方法について詳しく説明しています。
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です)
また、-sha256
-days 1095
などのオプションは必要ありません。
openssl x509 -req -in YOUR_CSR.csr -CA YOUR_CA.pem -CAkey YOUR_CA_KEY.pem -CAcreateserial -out YOUR_WANTED.crt