在 Apache 中,并没有一个直接命令可以查看“当前加载”的证书。更准确的做法是,去查看 Apache 配置文件中指定的证书文件,然后使用 `openssl` 命令来读取它的有效期。
这里有几种常用方法,你可以根据情况选择:
方法一:直接检查证书文件(最常用)
这是最直接的方法,前提是你能找到 Apache 配置中指向的证书文件。
1. 找到证书文件:在 Apache 的配置文件(通常是 `httpd.conf` 或 `ssl.conf`)中,查找 `SSLCertificateFile` 指令,它会指明证书文件的路径。
```bash
grep -i "SSLCertificateFile" /path/to/your/apache/conf/ssl.conf
```
假设找到的路径是 `/etc/ssl/certs/your_cert.pem`。
2. 使用 `openssl` 查看有效期:
```bash
openssl x509 -in /etc/ssl/certs/your_cert.pem -noout -dates
```
命令解释:
`openssl x509`:调用 OpenSSL 的 X.509 证书处理工具。
`-in /path/to/cert.pem`:指定证书文件路径。
`-noout`:不输出证书的编码内容。
`-dates`:只显示证书的起始和结束有效期。
输出示例:
```
notBefore=May 15 00:00:00 2024 GMT
notAfter=May 15 23:59:59 2025 GMT
```
这里 `notAfter` 就是证书的过期时间。
如果想更简洁地只看过期时间,可以用 `-enddate` 参数:
```bash
openssl x509 -enddate -noout -in /etc/ssl/certs/your_cert.pem
```
方法二:直接查询正在运行的网站(无需找文件)
如果你不确定证书文件的位置,或者想直接验证服务器当前提供的证书,可以用这个方法。它会直接与服务器进行 SSL 握手,获取并显示其证书信息。
```bash
echo | openssl s_client -connect your-domain.com:443 -servername your-domain.com 2>/dev/null | openssl x509 -noout -dates
```
命令解释:
`echo |`:向 `openssl s_client` 发送一个空输入,以建立连接后立即关闭。
`openssl s_client -connect your-domain.com:443`:建立一个到目标域名 443 端口的 SSL 连接。
`-servername your-domain.com`:重要,用于支持 SNI(Server Name Indication),确保当服务器托管多个网站时,你能获取到正确域名的证书。
`2>/dev/null`:屏蔽掉连接过程中的调试信息。
`| openssl x509 -noout -dates`:将获取的证书信息通过管道传递给 `openssl` 来提取有效期。
方法三:如果你用 Let's Encrypt 自动续期
如果你的证书是通过 Certbot (Let's Encrypt 客户端) 管理的,可以用更简单的命令查看所有证书的到期情况:
```bash
certbot certificates
```
这个命令会清晰列出所有由 Certbot 管理的证书及其到期日。
补充提示:
检查证书时,也可以顺便查看证书的颁发者(Issuer)和主题(Subject)等信息,确认是否正确。
如果需要查看证书的完整详细信息,可以用 `openssl x509 -in certificate.crt -text -noout`。