clojure - 如何使用 Clojure 检查 TLS 证书到期日期?

标签 clojure openssl

通常我使用 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/

相关文章:

java - 使用 openssl 以编程方式读取 java keystore 文件 jceks

c - 为什么使用 EVP 进行加密/解密时 aes_128_cbc() 有效,而 aes_128_gcm() 无效?

node.js - node.js 服务器的 SSL 握手失败

clojure - 进行 (map f c1 c2) map (count c1) 次,即使 c2 的元素较少

clojure - #'namespace/name_of_function中的错误

clojure - 编译器异常 java.lang.RuntimeException : Unable to resolve symbol: var in this context

clojure - Lein 测试失败,没有这样的 var : leiningen. util.injected/add-hook

c - C : STARTTLS via OpenSSL 上的 SMTP

Linux - openssl sha256 使用文件中的 key

java - 如何通过java或clojure解码bson