OpenSSL作为CA而不涉及certs/crl/index/etc环境

spr*_*aff 31 openssl x509

我认为我有正确的OpenSSL命令来签署证书,但我已经卡住了,我发现的教程使用了不同的参数格式(我使用的是OpenSSL 0.9.8o 2010年6月1日).

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

(私钥未加密,CSR在stdin上.)

它给出了这个错误

Using configuration from /usr/lib/ssl/openssl.cnf
./demoCA/index.txt: No such file or directory
unable to open './demoCA/index.txt'
Run Code Online (Sandbox Code Playgroud)

查看该配置文件:

[ 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.
Run Code Online (Sandbox Code Playgroud)

我没有这个设置.我不想设置任何这个.

它是严格的nessecary,还是有"不打扰"选项?

我尝试创建空目录和文件,但我陷入困境.我真正想要的是上面的命令工作,输出在stdout上,而不触及文件系统上的任何东西.

use*_*653 32

我不知道任何"不要打扰"选项,但这里是如何设置快速演示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
Run Code Online (Sandbox Code Playgroud)

现在您可以生成并签名密钥:

# 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
Run Code Online (Sandbox Code Playgroud)

  • 我想在这里表示感谢,因为在这个单一的解决方案中,我所拥有的OpenSSL问题的答案比我见过的任何其他单一资源都多.谢谢! (4认同)

sno*_*6oy 12

而不是使用ca选项尝试使用-req的x509选项.您可以添加-CAfile以指向您的权限.这将在不向索引添加条目的情况下签署您的证书.这里有更多关于将x509用作"迷你CA"的信息.

http://www.openssl.org/docs/apps/x509.html#SIGNING_OPTIONS

  • 在命令中包含命令而不仅仅是指向列出数百个命令行开关的文档会很好. (5认同)

bma*_*pin 9

根据snow6oy的回答,这是我做的:

openssl x509 -req -CA CACert.pem -CAkey CAKey.pem -CAcreateserial -in YourCSR.csr -out YourCert.pem
Run Code Online (Sandbox Code Playgroud)

一对可能有用的可选标志:

  • -days 1095
    (默认为30天)

  • -sha256
    (RHEL 7默认为SHA-1)