RHEL中的openssl - 使用root签署客户端证书而不使用openssl.cnf?

时间:2018-05-23 16:41:03

标签: linux scripting openssl rhel pki

尝试使用RHEL上的openssl实现一种自签名的PKI设置,但有一些注意事项。我将尝试在此提供尽可能多的信息。

版本:RHEL 6.7 | OpenSSL 1.0.1e-fips 2013年2月11日

脚本上的注意事项/约束:此脚本将用于创建多个密钥集 - 默认情况下,每个运行一个根密钥对和证书以及两个客户端密钥对和证书。要求用户输入客户端密钥上的文件位置,文件名和密码。所有这些都相当简单,我有一个脚本可以根据用户请求运行这些命令,并利用openssl.cnf文件指回根键进行签名。我曾经使用sed来改变openssl.cnf中基于文件名的位置指针,并且成功地能够签署客户端证书。

但是,有两个主要的注意事项:

  1. 我被要求更改脚本,以便每次运行时动态不是脚本或其他文件,这意味着如果可能的话,不应该动态编辑openssl.cnf。如果需要这样做,那么它应该没问题。

  2. 用户需要能够临时运行多个此脚本集,尤其是关于客户端密钥对(我在用户可选菜单中将根脚本和客户端生成脚本分开)。也就是说,生成客户端密钥对是必需的,有一个根密钥可以关联,但可以多次完成,客户端密钥脚本应该询问用户与哪个根密钥关联并签名?

  3. 由于存在这些限制,编辑openssl.cnf似乎是一个谨慎的选择,并且不具备可扩展性。所以,鉴于这个信息,我一直无法弄清楚的问题只是:

    有没有办法将客户端密钥指向一个变量,该变量将成为要签名的根密钥证书? (而不是使用openssl.cnf获取'证书' private_key'条目?)

    截至目前,我有:

    root 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}
    

    这是远程正确还是我离开了?

    提前感谢任何伸出援助之手的人。

1 个答案:

答案 0 :(得分:1)

OpenSSL有多种方法可以做同样的事情。您找到了一种使用openssl ca签署CSR的方法。 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密钥。