作为CA的OpenSSL,无需接触certs/crl/index/etc环境

作为CA的OpenSSL,无需接触certs/crl/index/etc环境,openssl,x509,Openssl,X509,我认为我有正确的OpenSSL命令来签署证书,但我遇到了问题,我发现教程使用了不同的参数格式(我使用的是OpenSSL 0.9.8o 2010年6月1日) openssl ca-cert cert.pem-keyfile key.pem (私钥未加密,CSR在标准DIN上。) 它给出了这个错误 Using configuration from /usr/lib/ssl/openssl.cnf ./demoCA/index.txt: No such file or directory unable

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

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

(私钥未加密,CSR在标准DIN上。)

它给出了这个错误

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.
我没有任何设置我不想对此进行任何设置。

这是严格意义上的“不打扰”,还是有一个“不打扰”的选择

我试图创建空的目录和文件,但我陷入了困境。我真正想要的是像上面这样的命令能够工作,输出在stdout上,而不涉及文件系统上的任何内容。

我不知道有任何“不要打扰”选项,但下面是如何设置快速演示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

不要使用ca选项,而是尝试使用带有-req的x509选项。您可以添加-CAfile以指向您的权限。这将在不向索引中添加条目的情况下对证书进行签名。这里有更多关于使用x509作为“迷你CA”的信息

基于此,以下是我所做的:

openssl x509 -req -CA CACert.pem -CAkey CAKey.pem -CAcreateserial -in YourCSR.csr -out YourCert.pem
可能有用的两个可选标志:

  • -1095天

    (默认值为30天)

  • -sha256

    (RHEL 7默认为SHA-1)


我认为,如果您指定了最低要求,您可能会得到更好的响应,也就是说,您是否对任何提供CA证书和密钥的解决方案感到满意,该解决方案可以签署客户端证书,还是必须使用
openssl CA
?(我并不知道有更好的答案)如果不设置CA,使用OpenSSL是没有出路的,因为否则你怎么能签署证书请求?你不会有CA来做那件事请记住,OpenSSL跟踪它看到的证书请求,以及它签署/撤销的证书,等等。。。这就是为什么需要这些目录(你可以使用这些路径的默认值)。我接受这是CA正常职责的一部分,但不履行这些职责的异常CA不需要这些目录,对吗?@spraff:这取决于你所说的“CA”,您可以只执行与
openssl ca
相同的过程,而不必写磁盘之类的东西,这就是为什么我要求您澄清什么将构成您的最小解决方案。最小解决方案将生成提交者可以使用的证书,该证书可以根据ca的根证书进行验证。CA根本不需要保留任何信息,也不需要为撤销或任何事情保留任何信息。以下是有关设置您自己的CA()的说明,以及指向OpenSSL文档和SSL证书的链接。我知道这不是您想要的答案,但我认为如果没有证书颁发机构(使用根证书设置),您无法签署证书。尽管SSL证书HOWTO的第2.3节暗示了这可能是可能的,但并不确切地说是如何实现的。我想在此表示感谢,因为在这个单一的解决方案中,我多年来遇到的OpenSSL问题比我见过的任何其他单一资源都要多。谢谢x509在大多数情况下更易于使用。今天我在Windows上花了8或9个小时来处理req,然后我找到了你的答案,并在2分钟内解决了它。最好在命令中包含一个命令,而不是仅仅指向列出数百个命令行开关的文档。尤其是现在的404页
openssl x509 -req -CA CACert.pem -CAkey CAKey.pem -CAcreateserial -in YourCSR.csr -out YourCert.pem