【问题标题】:openSSL sign https_client certificate with CAopenSSL 使用 CA 签署 https_client 证书
【发布时间】:2015-08-18 12:38:24
【问题描述】:

我需要:

  • 创建 CA 证书
  • 创建 https_client-certificate
  • 由 CA 签署 https_client-certificate

通过使用 Linux 上的命令行 - openSUSE。我创建 CA 证书:

 # openssl genrsa -out rootCA.key 2048
Generating RSA private key, 2048 bit long modulus
..........................................................+++
....................+++
e is 65537 (0x10001)
 # openssl req -x509 -new -nodes -key rootCA.key -days 3650 -out rootCA.pem
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:AA
State or Province Name (full name) [Some-State]:A
Locality Name (eg, city) []:A
Organization Name (eg, company) [Internet Widgits Pty Ltd]:A
Organizational Unit Name (eg, section) []:A
Common Name (e.g. server FQDN or YOUR name) []:A
Email Address []:A
 #

工作正常。然后我创建 https_client-certificate:

 # openssl genrsa -out client1.key 2048
Generating RSA private key, 2048 bit long modulus
............................+++
.............................................+++
e is 65537 (0x10001)
 #
 # openssl req -x509 -new -nodes -key client1.key -days 3650 -out client1.pem
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:BB
State or Province Name (full name) [Some-State]:B
Locality Name (eg, city) []:B
Organization Name (eg, company) [Internet Widgits Pty Ltd]:B
Organizational Unit Name (eg, section) []:B
Common Name (e.g. server FQDN or YOUR name) []:B
Email Address []:B
 #

工作正常。现在,当我尝试使用 CA 签署 https_client-certificate 时,我在这里遇到了一些错误:

 # openssl ca -in client1.pem -out client11.pem
Using configuration from /etc/ssl/openssl.cnf
Error opening CA private key ./demoCA/private/cakey.pem
139667082016400:error:02001002:system library:fopen:No such file or directory:bss_file.c:404:fopen('./demoCA/private/cakey.pem','re')
139667082016400:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:406:
unable to load CA private key
 #

我已经试过了:

但对我来说没有成功。我在某处读到,特定输入的属性需要与在 CA-creation 中输入的属性相同,但至少在使用 XCA-Tool 在 Windows 上创建证书时,这是不正确的。我可以输入完全不同的东西,只要我用 CA 签名就可以使用它。有人能帮我吗?

更新: 我只使用 .key 和 .pem 因为这适用于我在 Windows 上使用 XCA-Tool ...我实际上正在阅读 openSSL Cookbook (https://www.feistyduck.com/library/openssl-cookbook/online/ch-openssl.html) 以查看我是否做错了什么。首先想到,我是否必须使用 .csr 来签署证书,或者我也可以使用任何其他格式吗?

【问题讨论】:

    标签: ssl command-line openssl


    【解决方案1】:

    您正在使用“openssl ca”工具,该工具默认使用以下配置文件:/etc/ssl/openssl.cnf。换句话说,您没有尝试使用 CA 证书进行签名,而是使用该配置文件中的默认值。您还将 -x509 参数传递给导致无效 csr 的客户端证书签名请求。

    请在下方找到工作生成和签名命令。

    生成 CA 密钥和证书:

    openssl genrsa -out rootCA.key 2048
    openssl req -x509 -new -key rootCA.key -days 3650 -out rootCA.pem \
    -subj '/C=AA/ST=AA/L=AA/O=AA Ltd/OU=AA/CN=AA/emailAddress=aa@aa.com'
    

    生成客户端密钥和 csr:

    openssl genrsa -out client1.key 2048
    openssl req -new -key client1.key -out client1.csr \
    -subj '/C=BB/ST=BB/L=BB/O=BB Ltd/OU=BB/CN=BB/emailAddress=bb@bb.com'
    

    生成用 CA 证书签名的客户端证书:

    openssl x509 -req -days 365 -CA rootCA.pem -CAkey rootCA.key \
    -CAcreateserial -CAserial serial -in client1.csr -out client1.pem
    

    当然,您可以将配置文件设置为使用正确的 CA 文件,然后使用“openssl ca”工具。

    您可以像这样验证您的证书:

    openssl verify -verbose -CAfile rootCA.pem client1.pem
    

    【讨论】:

    • 感谢您到目前为止的回复,我有一个会议,在过去的几个小时内无法解决这个问题......我明天一定会看看。到目前为止谢谢你。
    • 非常感谢先生,这对我有用......我做 openssl pkcs12 -export -out client1.p12 -inkey client1.key -in client1.pem -certfile rootCA.pem 转换为 . p12 ...我现在要实现这个。出于安全原因,我想我需要设置/更改一些选项。
    • 你能再帮我一次吗?我想让我自己创建的 rootCA 可信。你知道怎么做吗? @talamaki
    • 要使您自己生成的 ca 证书受信任,您需要使其可用于验证使用它签名的证书的应用程序。因为您生成了客户端证书,所以您的目标可能是让您的客户端通过某些服务器的身份验证。您需要以某种方式将您的 ca 证书导入服务器证书存储。对于opensuse,请参见例如forums.opensuse.org/showthread.php/…
    • 您计划分发您的 ca 证书的范围越广,您就越需要小心使用您的 ca 私钥。您可以轻松找到描述如何充当您自己的证书颁发机构的 Web 链接,例如area536.com/projects/…davidpashley.com/articles/….
    猜你喜欢
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 2018-03-20
    • 2015-07-29
    • 2013-03-25
    • 1970-01-01
    相关资源
    最近更新 更多