7

我缺少一些关于使用 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 证书和客户端 CSR 的状态名称必须相同。

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

4

1 回答 1

6

解决了。谢谢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
于 2013-05-21T16:34:12.833 回答