我成为我自己的证书颁发机构完成以下教程后:https://jamielinux.com/docs/openssl-certificate-authority/
我创建了一个根对,创建了一个中间对,并签署了一个服务器证书,我将其安装在鱿鱼上,如下所示:
http_port 3129 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid3/certs/gatesentry.csr.cert.pem key=/etc/squid3/key/gatesentry.key.pem
在鱿鱼3.conf
Squid 以此启动得很好。仍然不确定它是否真的有效。
当我尝试生成客户端证书以安装在将通过代理访问互联网的浏览器中时,我最终出现错误:
我根据以下内容生成它“签署服务器和客户端证书”部分,内容为“创建证书”
它指出,如果我要创建用于身份验证的客户端证书,我需要使用“usr_crt”扩展,因此我运行:
cd /root/ca
openssl ca -config intermediate/openssl.conf \
-extensions usr_cert -days 375 -notext -md sha256 \
-in intermediate/csr/gatesentry.csr.pem \
-out intermediate/certs/client.cert.pem
Using configuration from intermediate/openssl.conf
Enter pass phrase for /root/ca/intermediate/private/intermediate.key.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 4097 (0x1001)
Validity
Not Before: Jun 22 10:36:44 2016 GMT
Not After : Jul 2 10:36:44 2017 GMT
Subject:
countryName = US
stateOrProvinceName = Pennsylvania
localityName = locality
organizationName = Parents
organizationalUnitName = Security
commonName = gatesentry.domain.lan
emailAddress = [email protected]
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Cert Type:
SSL Client, S/MIME
Netscape Comment:
OpenSSL Generated Client Certificate
X509v3 Subject Key Identifier:
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
X509v3 Authority Key Identifier:
keyid:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
X509v3 Key Usage: critical
Digital Signature, Non Repudiation, Key Encipherment
X509v3 Extended Key Usage:
TLS Web Client Authentication, E-mail Protection
Certificate is to be certified until Jul 2 10:36:44 2017 GMT (375 days)
Sign the certificate? [y/n]: y
failed to update database
TXT_DB error number 2
我不明白为什么当我以 root 身份运行命令时(当然是在另一台机器上)收到 TXT_DB 错误号 2 消息。
根据教程,我应该能够在此过程中更改通用名称。
答案1
TXT_DB error number 2
表示 DB_ERROR_INDEX_CLASH。
您已尝试将具有相同索引的证书提交到 OpenSSL CA 数据库两次。
造成这种情况的原因通常是向数据库提交的证书包含相同的序列号或相同的公用名。对于后者,请检查文件unique_subject
中的选项intermediate/openssl.conf
,您可以在 中阅读该选项man ca
。
客户端证书的通用名称可以是任何内容,例如您的名字。
通用名称将在文件中指定intermediate/openssl.conf
。它可以配置为提示输入值或从配置文件读取值。这是由prompt
选项控制的,您可以在 中阅读有关该选项的信息man req
。
答案2
根据教程,我应该能够在此过程中更改通用名称
该教程告诉您使用 生成新密钥,openssl genrsa
并使用新的 CSR,openssl req -new
并使用 CSR 创建证书openssl ca
。 (尽管像很多人一样,它错误地表示证书是通过“签署 CSR”创建的。CA 不会签署 CSR。CA 签署证书,这会创建部分基于CSR,但与CSR不同。 /咆哮)
当您生成新的 CSR 时您指定主题名称,包括但不限于通用名称,正如其所说,该名称必须与其上方的 CA 证书不同,并且应该与其他 EE 证书不同,以避免混淆。
openssl ca
实际上可以覆盖已颁发证书的主题名称(整个名称,而不是单独的通用名称),但这将导致同一密钥的证书具有不同的名称,这充其量是不必要的混乱并且通常不太安全(尽管您不这样做)关心那部分,其他人也关心,所以这并不容易)。
在 usr-crt 部分加载扩展时出错
...没有值... name=email_in_dn
这可能来自上游默认文件...
不直接。openssl ca -config xxx
使用 xxx,并且仅使用 xxx 作为其配置文件。如果您的文件源自上游,则您想要的部分名称usr_cert
显然是您已经发现的,但您不需要指定 usr_cert,因为它是默认值。有关 email_in_dn 的错误消息仅残留在错误堆栈中,唯一真正的错误是usr-crt
;一旦你修复了就-noemailDN
不需要了,尽管你可能仍然需要它。
这与 subjectNameAlt 有关系吗?
假设你的意思是unique_subject
,不。subjectAltName
(not subjectNameAlt
) 又名 SAN 是一个通用扩展,它指定主题的备用名称,但unique_subject
仅涉及基本Subject
字段而不涉及任何 SAN。
安装在将通过代理访问互联网的浏览器中的客户端证书
需要明确的是,这样的客户端证书仅用于验证您自己的身份到代理。您不能使用客户端/浏览器中的证书通过任何 HTTPS MitM 对 Internet 上的某些内容进行身份验证,并且您不能使用您自己颁发的客户端证书对 Internet 上任何其他人的系统进行身份验证。