openSSL使用CA签署https_client证书

时间:2015-08-18 12:38:24

标签: ssl command-line openssl

我需要:

  • 创建CA证书
  • 创建https_client-certificate
  • 通过CA签署https_client证书

在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创建时输入相同,但至少在使用XCA-Tool在Windows上创建证书时这是不正确的。我可以输入完全不同的东西,只要我用CA签名就可以使用它。有人能帮我吗?

更新 我只使用.key和.pem,因为这对我来说在Windows上使用XCA-Tool ...我实际上正在阅读openSSL Cookbook(https://www.feistyduck.com/library/openssl-cookbook/online/ch-openssl.html)以查看我是否有任何特殊错误。首先想到的是,我是否必须使用.csr签署证书,或者我是否也可以使用其他任何格式执行此操作?

1 个答案:

答案 0 :(得分:10)

您正在使用'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