通常我使用 openssl
命令检查服务器的证书过期时间,但我正在学习 Clojure,并且真的很想弄清楚如何在不调用 shell 命令的情况下执行此操作(如果可能的话)。
我将如何复制此功能?
$ openssl s_client -connect google.com:443 < /dev/null ^ /dev/null | openssl x509 -noout -enddate | awk -F'=' '{print $2}'
Apr 17 09:15:00 2019 GMT
最佳答案
可以通过 interop 使用 Java API 在 Clojure 中获取和检查服务器证书.
假设服务器使用 HTTPS,可以从 javax.net.ssl.HttpsURLConnection 检索证书实例一旦处于连接状态。通过调用 getInputStream
方法建立连接,getServerCertifcates
方法将服务器证书作为 java.security.cert.X509Certificate 的数组返回。 .要获取 HttpsURLConnection
实例,我们必须在 java.net.URL
上调用 openConnection
方法。 X509Certificate
的方法 getNotAfter
返回证书到期日期。
在 Clojure 中,它看起来像这样:
(ns foo.core
(:require [clojure.java.io :as io]))
(defn get-server-certs [from]
(let [url (io/as-url from)
conn (.openConnection url)]
(with-open [_ (.getInputStream conn)]
(.getServerCertificates conn))))
(.getNotAfter (first (get-server-certs "https://www.google.com")))
;;=> #inst "2019-04-17T09:15:00.000-00:00"
关于clojure - 如何使用 Clojure 检查 TLS 证书到期日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54612465/