我已在 /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 是加密领域的瑞士军刀,因此有很多选择。不幸的是,阅读手册页是理解它的唯一方法。