如何使用openssl签署客户的CSR?

时间:2013-05-20 22:12:31

标签: openssl csr

我遗漏了一些基本的,明显的用openssl命令签署客户的CSR。

我有(模拟)两个组织,一个是证书颁发机构的组织(存在于加利福尼亚州),另一个是处于WA状态的客户组织。

我按照这些步骤使用openssl命令在Linux系统上创建了证书颁发机构。 http://www.freebsdmadeeasy.com/tutorials/freebsd/create-a-ca-with-openssl.php

我现在有两个文件  1. cakey.pem包含CA的私钥。此私密也与密码相关联。  2. cacert.pem包含CA的自签名证书

接下来,我想从客户端签署所有CSR。来自华盛顿州的客户端向我发送了一个文件client-csr.pem。我正在阅读关于在最后签署CSR和示例的这个手册页。 http://www.openssl.org/docs/apps/ca.html

我正在尝试的命令和错误消息如下:我在CA的系统上运行这些命令,我​​在同一系统中创建了cakey.pem(CA的私钥)和cacert.pem(CA的自我签署证书)

$ openssl ca -in demoCA/csrs/client-csr.pem -out client-cert.pem
Using configuration from /usr/lib/ssl/openssl.cnf 
Enter pass phrase for ./demoCA/private/cakey.pem: 
Check that the request matches the signature 
Signature ok 
The stateOrProvinceName field needed to be the same in the 
CA certificate (California) and the request (WA)

问题是为什么CA-certificate和客户端CSR的州名必须相同。

客户不在“加利福尼亚”,因此当他们创建CSR时,他们会输入自己的州名(WA)。作为证书颁发机构,我已经验证客户端确实在WA中,并且CSR文件确实来自它们。我想签署此CSR并将证书返回给客户。

1 个答案:

答案 0 :(得分:6)

解决。谢谢dbasic。

在进行签名活动的CA系统上, 制作/etc/ssl/openssl.conf的副本并修改它并创建一个新的配置文件。签名时使用该修改后的副本。

cp /etc/ssl/openssl.cnf  ./openssl-for-signing-csrs.cnf

修改' countryName',stateOrProvinceName或' organizationName'提供'。这表明证书应该使用CSR中的值,并且不要尝试与证书匹配(人们会尝试匹配仅用于自签名,默认openssl.cnf似乎已经制作用于自我签名而不是用于CA)

80,82c80,82
< countryName           = match
< stateOrProvinceName   = match
< organizationName      = match
---
> countryName           = supplied
> stateOrProvinceName   = supplied
> organizationName      = supplied