我遗漏了一些基本的,明显的用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并将证书返回给客户。
答案 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