默认目录在 OpenSSL 配置文件中不起作用

默认目录在 OpenSSL 配置文件中不起作用

我已在 /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您将看到使用该命令时由 CA 签名的所有证书openssl ca,文件名由附加的证书序列号组成.pem

当您使用时,openssl req这些文件不会被使用。

该命令的手册页req是这样说的:

-输出文件名

默认情况下,这指定要写入的输出文件名或标准输出。

因此,它将写入给定的文件名,并位于运行命令的目录中;或者它将写入标准输出。

-keyout 文件名

这给出了要写入新创建的私钥的文件名。如果未指定此选项,则使用配置文件中存在的文件名。

这将写入给定的文件名,该文件名再次位于您运行命令的目录中;或者它将写入default_keyfile选项中给出的文件名([ req ]当然在下面)。

在这两种情况下,如果您不希望将文件放置在当前目录中,则可以在命令中给出文件的绝对路径。


当您使用命令签署来自下属(CA 或最终实体)的请求时,您在文件中配置的结构.conf将起作用。openssl 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 是加密领域的瑞士军刀,因此有很多选择。不幸的是,阅读手册页是理解它的唯一方法。

相关内容