撤销由一个 CA 签名的多个客户端证书:只有第一个被拒绝?

撤销由一个 CA 签名的多个客户端证书:只有第一个被拒绝?
  • 操作系统:Ubuntu 12.04
  • OpenVPN版本:2.2.1-8
  • 设置:一个 CA 证书、一个服务器证书、多个客户端证书

服务器配置:

port 1194
proto udp
dev tun
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/team.log
syslog vpn-team
verb 4
writepid /var/run/openvpn-team.pid
ca /etc/openvpn/ca.crt
cert /etc/openvpn/team/server.crt
key /etc/openvpn/team/server.key  # This file should be kept secret
dh /etc/openvpn/dh.pem
server 172.16.255.128 255.255.255.128
ifconfig-pool-persist /etc/openvpn/team/ipp.txt
client-to-client
push "route 172.16.0.0 255.255.254.0"
crl-verify crl.pem

客户端配置:

dev tun
proto udp
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
comp-lzo
verb 4
client
remote x.x.x.x 1194
ca ca.crt
cert team.crt
key team.key
remote-cert-tls server

使用包revoke-full中的脚本easy-rsa,我发现它只将最后一个输出到文件中crl.pem

# generate a new CRL -- try to be compatible with
# intermediate PKIs
$OPENSSL ca -gencrl -out "$CRL" -config "$KEY_CONFIG"

就我而言,我编写了一个脚本来附加到该文件,但只有第一个被拒绝,所有其他的仍然可以连接。

使用openssl crl,它只显示第一个的序列:

Revoked Certificates:
    Serial Number: E9955907C7F48BDDFCADCFECFAEDC8B7
        Revocation Date: Feb 11 08:57:19 2015 GMT

所以,问题是:是否crl-verify支持串联 CRL 文件?这是 openssl 的限制吗?

有关的:

答案1

那么,问题是:是否crl-verify支持连接的 CRL 文件?

不,crl.pem只是像这样:

-----BEGIN X509 CRL-----
MIICAzCB7DANBgkqhkiG9w0BAQQFADCBlTELMAkGA1UEBhMCVVMxEzARBgNVBAgT
CkNhbGlmb3JuaWExFTATBgNVBAcTDFJlZHdvb2QgQ2l0eTESMBAGA1UEChMJUnVu
d2F5IDIwMREwDwYDVQQLEwhEZXYgVGVhbTETMBEGA1UEAxMKb3BlbnZwbi1jYTEe
MBwGCSqGSIb3DQEJARYPaW5mb0BydW53YXkuY29tFw0xNTAyMTMwNjAwMzJaFw0x
NTA1MjQwNjAwMzJaMCUwIwIQUp+UnftT7IKiLOnT/6OachgPMjAxNTAyMTMxMzAw
1tYZj9iJzdzOsRbcK10FrwswLJ8ZNKWvLHfiqOVr7JakxCM3e8uVuMwtkEugHnmB
HjtU39ero7j3AUZZHETQaMnJvnQAMqcy+RKCDWDuxzBWr5vxkY85AatQmz2SfNAi
5F93UXQyegXpQohmkQaq7mSDbpeO163G5n9MqOGdG2fIYYOQSkgl+h2/hx/+9+jC
8y491cg/evAWerSVFVrzaA1T5dmhSBX6Awb9RnxDvo8ZlJufjOqhxMwU8J19RYOj
M2Rk9JQ5Wvgq4Q+3qM0uEhHVFfSaAUvGqTHJwqtgPR23x7F00jNB
-----END X509 CRL-----

但是使用openssl crl -in /path/to/crl.pem -text -noout,如果多个证书已被撤销,您将看到如下内容:

Revoked Certificates:
    Serial Number: 01
        Revocation Date: Feb 13 14:59:08 2015 GMT
    Serial Number: 02
        Revocation Date: Feb 13 14:59:10 2015 GMT

我编写了一个脚本来附加到该文件,但只有第一个被拒绝,所有其他的仍然可以连接。

这一步我错了。revoke-full仔细阅读脚本:

# revoke key and generate a new CRL
$OPENSSL ca -revoke "$1.crt" -config "$KEY_CONFIG"

# generate a new CRL -- try to be compatible with
# intermediate PKIs
$OPENSSL ca -gencrl -out "$CRL" -config "$KEY_CONFIG"

OpenSSL 有一个index.txt文件保存所有证书信息:

  • 状态:(V)有效,(E)已过期,(R)已唤起
  • 到期日
  • 撤销日期
  • 序列号
  • 证书的文件名(未知)
  • 主题

第一个命令 ( openssl ca -revoke) 实际上更新该index.txt文件,用 R(撤销)替换 V(有效)。第二个命令 ( )根据CA 证书/密钥openssl ca -gencrl创建一个文件。crl.pemindex.txt

因此,不要附加到现有crl.pem文件,只需更新index.txt第一个文件,然后重新生成 CRL。

相关内容