如今,安全信息传输的最重要方面之一是加密。 使用SSL证书对从客户端传输到服务器的数据进行加密。 证书是由认证机构认证的公钥。
通常,所有SSL证书的发行期限都是有限的,在此之后它们将过期,并且必须重新发行。 但是,有时证书可以在到期日期之前被吊销。 吊销SSL证书的原因很多,其中最常见的原因是私钥丢失或被破坏,公司注册数据已更改等。
有两种方法可以检查吊销列表中是否包含SSL证书:
- CRL(证书吊销列表)-检查吊销列表中是否存在证书序列号。
- OCSP(在线证书状态协议)-证书被发送到专用服务器,在此检查其状态。
让我们使用Ubuntu控制台更详细地介绍这两种方法。 并以一个示例为例,让我们检查habr.com域的证书以进行审查。
CRL
下载我们感兴趣的域的证书:
echo -n | openssl s_client -connect habr.com:443 -servername habr.com 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/habr.com.crt
感谢Legioner提示添加-servername参数-如果在同一IP地址上安装了多个(SNI)证书,则必须正确选择证书。我们查看证书的详细信息:
openssl x509 -noout -text -in /tmp/habr.com.crt
在这里,我们对“ X509v3 CRL分发点”部分的“全名”感兴趣。
从此链接下载CLR列表:
wget http://crl.comodoca.com/COMODORSADomainValidationSecureServerCA.crl
我们选择证书的序列号:
openssl x509 -in /tmp/habr.com.crt -noout -serial
我们看一下这个数字是否在CRL列表中:
openssl crl -inform DER -text -in COMODORSADomainValidationSecureServerCA.crl | grep "90E58B0601C3AD98F07AEE092041C437"
如果未找到任何内容,则证书不会被吊销。
OCSP
我们将显示我们感兴趣的域的证书以及中间证书链:
echo -n | openssl s_client -connect habr.com:443 -showcerts
将域证书和中间证书(在----- BEGIN CERTIFICATE -----和----- END CERTIFICATE -----之间的代码)保存到文件中:
/tmp/habr.com.crt /tmp/intermediate.crt
定义OCSP服务器:
openssl x509 -in /tmp/habr.com.crt -noout -ocsp_uri
我们将向OCSP服务器发送请求,以检查证书是否吊销:
openssl ocsp -url http://ocsp.comodoca.com -issuer /tmp/intermediate.crt -cert /tmp/habr.com.crt -text
如果正确指定了所有内容,则OCSP服务器应返回有关证书的信息。
这是您感兴趣的最后几行:
Response verify OK /tmp/habr.com.crt: good
撤消证书列表中没有证书的情况由值“好”表示,如果证书被撤消,则该值将被“撤消”。
自动化技术
手动检查SSL证书以进行吊销并不总是很方便,因此可以自动执行验证过程。
为此,我们将现成的ssl-check-revoc.sh脚本与
Github一起使用 ,该脚本使用CRL方法检查证书:
wget https://raw.githubusercontent.com/o-pod/security/master/ssl-check-revoc.sh
接下来,使脚本可执行:
chmod a+x ssl-check-revoc.sh
现在,您可以检查域的已安装证书和本地存储在文件中的证书(选项-f):
./ssl-check-revoc.sh habr.com -v
扎比克斯
ssl-check-revoc.sh脚本不仅可以从控制台检查证书,而且还非常适合作为Zabbix的检查器,因此可以将跟踪到吊销列表的证书的所有脏工作委托给监视系统。
我们进入Zabbix配置文件/etc/zabbix/zabbix_server.conf,看看用于外部检查的脚本在哪里:
ExternalScripts=/etc/zabbix/externalscripts
我们将脚本复制到此目录,然后重新启动Zabbix:
sudo cp ssl-check-revoc.sh /etc/zabbix/externalscripts/ sudo systemctl restart zabbix-server
我们进入Web界面并创建一个模板(配置>>模板>>创建模板)。 对于模板的名称,请指定“模板SSL检查”。 然后,在模板内部,创建“吊销列表中的SSL证书”项(项目),指定“ ssl-check-revoc.sh [{HOST.NAME}]”作为密钥,检查类型为“外部检查”。 您可以根据项目的关键程度自由设置检查间隔。

您还将需要两个触发器:
1.要发出证书吊销“域{HOST.NAME}的证书在吊销列表中”的信号
表达式:“ {模板自定义SSL检查:ssl-check-revoc.sh [{HOST.NAME}]。Last()} = 1”

2.如果出现问题(例如,CLR服务器出现问题等),以发出错误信号“检查域{HOST.NAME}的证书时出错”
表达式:“ {模板自定义SSL检查:ssl-check-revoc.sh [{HOST.NAME}]。Last()} = 2”

如果发生触发器,请不要忘记在操作(配置>>操作)中配置通知方法。
现在剩下的工作就是创建主机,我们将定期检查其证书(配置>>主机>>创建主机)。 在模板标签上,链接我们的模板SSL检查模板。

就是这样! 您可以安然入睡:如果您的域的SSL证书由于任何原因落入了被撤消的SSL列表,Zabbix会立即通知您。