RHEL 中的 openssl - 在不使用 openssl.cnf 的情况下使用 root 签署客户端证书?
openssl in RHEL - sign client cert with root without utilizing openssl.cnf?
尝试在 RHEL 上利用 openssl 实现一种自签名 PKI 设置,但有一些注意事项。我将尝试在这里提供尽可能多的信息。
版本:RHEL 6.7 | OpenSSL 1.0.1e-fips 2013 年 2 月 11 日
Caveats/constraints 脚本:此脚本将用于创建多个密钥集 - 默认情况下,每个 运行 一个根密钥对和证书以及两个客户端密钥对和证书。要求用户输入客户端密钥上的文件位置、文件名和密码。所有这一切都相当简单,我有一个脚本可以根据用户请求 运行 这些命令,并利用 openssl.cnf 文件指向根密钥进行签名。我最初使用 sed 根据文件名更改 openssl.cnf 中的位置指针,并成功签署了客户端证书。
但是,对此有两个主要警告:
我被要求更改脚本,这样它就不是每个 运行 的动态脚本或其他文件,这意味着 openssl.cnf 不应即时编辑,如果可能。但是,如果需要这样做,那么应该没问题。
用户需要能够 运行 多组此脚本,特别是关于客户端密钥对(我将根脚本和客户端生成脚本分开用户可选择的菜单)。也就是说,生成客户端密钥对需要有一个根密钥与之关联,但可以多次完成,并且客户端密钥脚本应该询问用户与哪个根密钥关联并从哪个根密钥签名?
由于这些限制,编辑 openssl.cnf 似乎不是一个谨慎的选择,而且可扩展性不是很好。因此,鉴于此信息,我无法弄清楚的问题很简单:
有没有办法将客户端密钥指向一个变量,该变量将是要签名的根密钥证书? (而不是将 openssl.cnf 用于 'certificate' 和 'private_key' 条目?)
截至目前,我有:
根密钥和证书:
openssl req -config $dir/openssl.cnf -new -x509 -days 3652 -nodes -sha384 -newkey ec:ec-secp384r1.pem -keyout $userdir/${rootName}_private.key -out $userdir/${rootName}.crt -subj "stuff_here"
...
export rootName
客户端密钥和证书:
read -p "Which root key do you want to associate this client keypair with? Please type absolute filepath and filename (ending in .key); rkAssoc #STILL NEED TO USE THIS VARIABLE
##KEY GENERATION
openssl req -newkey ec:ec-secp384rp1.pem -keyout $userdir/{$clientName}_privat.key -out $userdir/client/${clientName}.csr -subj "Stuff_here"
##SIGN CSR
openssl ca -config $dir/openssl.cnf -policy policy_anything -extensions usr_cert -days 730 -notext -md sha384 -in $userdir/client/${clientName}.csr -out $userdir/client/${clientName}_signedprivatekey.pem && echo "Client key created."
所以我猜,
1) 我的客户端签名是否正确(似乎有些不对劲但不确定)
2) 而不是引用 -req openssl.cnf 我认为可能有某种标志,您可以在其中做一些更像
openssl ca ... -cert ${rkAssoc}
这是远远正确的还是我错了?
提前感谢任何伸出援手的人。
OpenSSL 有多种方法可以完成同一件事。您找到了一种签署 CSR 的方法,使用 openssl ca
。 openssl x509
可以充当迷你 CA,因此要消除对配置文件的需求,您可以执行以下操作:
openssl x509 -req -in /tmp/mykey.csr.pem -CA /path/to/ca/mycacert.pem -CAkey /path/to/ca/cakey engine -CAserial /path/to/ca/myca.srl -days 3600 -out /tmp/mykeypub.cert.pem
其中 -CA
指向您的根 CA 证书,-CAkey
指向您的根 CA 密钥。
尝试在 RHEL 上利用 openssl 实现一种自签名 PKI 设置,但有一些注意事项。我将尝试在这里提供尽可能多的信息。
版本:RHEL 6.7 | OpenSSL 1.0.1e-fips 2013 年 2 月 11 日
Caveats/constraints 脚本:此脚本将用于创建多个密钥集 - 默认情况下,每个 运行 一个根密钥对和证书以及两个客户端密钥对和证书。要求用户输入客户端密钥上的文件位置、文件名和密码。所有这一切都相当简单,我有一个脚本可以根据用户请求 运行 这些命令,并利用 openssl.cnf 文件指向根密钥进行签名。我最初使用 sed 根据文件名更改 openssl.cnf 中的位置指针,并成功签署了客户端证书。
但是,对此有两个主要警告:
我被要求更改脚本,这样它就不是每个 运行 的动态脚本或其他文件,这意味着 openssl.cnf 不应即时编辑,如果可能。但是,如果需要这样做,那么应该没问题。
用户需要能够 运行 多组此脚本,特别是关于客户端密钥对(我将根脚本和客户端生成脚本分开用户可选择的菜单)。也就是说,生成客户端密钥对需要有一个根密钥与之关联,但可以多次完成,并且客户端密钥脚本应该询问用户与哪个根密钥关联并从哪个根密钥签名?
由于这些限制,编辑 openssl.cnf 似乎不是一个谨慎的选择,而且可扩展性不是很好。因此,鉴于此信息,我无法弄清楚的问题很简单:
有没有办法将客户端密钥指向一个变量,该变量将是要签名的根密钥证书? (而不是将 openssl.cnf 用于 'certificate' 和 'private_key' 条目?)
截至目前,我有:
根密钥和证书:
openssl req -config $dir/openssl.cnf -new -x509 -days 3652 -nodes -sha384 -newkey ec:ec-secp384r1.pem -keyout $userdir/${rootName}_private.key -out $userdir/${rootName}.crt -subj "stuff_here"
...
export rootName
客户端密钥和证书:
read -p "Which root key do you want to associate this client keypair with? Please type absolute filepath and filename (ending in .key); rkAssoc #STILL NEED TO USE THIS VARIABLE
##KEY GENERATION
openssl req -newkey ec:ec-secp384rp1.pem -keyout $userdir/{$clientName}_privat.key -out $userdir/client/${clientName}.csr -subj "Stuff_here"
##SIGN CSR
openssl ca -config $dir/openssl.cnf -policy policy_anything -extensions usr_cert -days 730 -notext -md sha384 -in $userdir/client/${clientName}.csr -out $userdir/client/${clientName}_signedprivatekey.pem && echo "Client key created."
所以我猜,
1) 我的客户端签名是否正确(似乎有些不对劲但不确定)
2) 而不是引用 -req openssl.cnf 我认为可能有某种标志,您可以在其中做一些更像
openssl ca ... -cert ${rkAssoc}
这是远远正确的还是我错了?
提前感谢任何伸出援手的人。
OpenSSL 有多种方法可以完成同一件事。您找到了一种签署 CSR 的方法,使用 openssl ca
。 openssl x509
可以充当迷你 CA,因此要消除对配置文件的需求,您可以执行以下操作:
openssl x509 -req -in /tmp/mykey.csr.pem -CA /path/to/ca/mycacert.pem -CAkey /path/to/ca/cakey engine -CAserial /path/to/ca/myca.srl -days 3600 -out /tmp/mykeypub.cert.pem
其中 -CA
指向您的根 CA 证书,-CAkey
指向您的根 CA 密钥。