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

9
我对使用openssl命令签署客户机CSR的基本步骤和显而易见的部分感到困惑。
我创建了两个组织(模拟),一个是证书颁发机构的组织(位于加利福尼亚州),另一个是客户组织,位于华盛顿州。
我在Linux系统上使用openssl命令创建了证书颁发机构,并按照以下步骤操作。 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证书和客户端CSR必须使用相同的州名称。
客户端不在“加利福尼亚”,因此当他们创建CSR时,会放置自己所在的州名(WA)。作为证书颁发机构,我已验证客户确实在WA,并且CSR文件确实来自他们。我想签署这个CSR并将证书返回给客户。

请检查您的配置文件。这必须通过配置来实施,而不是通过OpenSSL和X.509。 - doptimusprime
1个回答

8

问题已解决。感谢dbasic。

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

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

将'countryName'、stateOrProvinceName或'organizationName'修改为'supplied'。这表示证书应使用CSR中的值,而不尝试与证书匹配(仅在自签名时才会尝试“匹配”,默认的openssl.cnf似乎是为自签名而制作的,而不是CA)

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接