Как проверить срок действия сертификата TLS с Clojure? - PullRequest
0 голосов
/ 10 февраля 2019

Обычно я проверяю срок действия сертификата сервера с помощью команды openssl, но я изучаю Clojure и очень хотел бы выяснить, как это сделать без вызова команды оболочки, если это возможно.

Как быЯ копирую эту функциональность?

$ 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

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Можно получать и проверять серверные сертификаты в Clojure с помощью API Java через interop .

Если сервер говорит по HTTPS, сертификаты могут быть получены из javax.net.ssl.HttpsURLConnection экземпляр, когда он находится в подключенном состоянии.Соединение устанавливается путем вызова метода getInputStream, а метод getServerCertifcates возвращает сертификаты сервера в виде массива java.security.cert.X509Certificate .Чтобы получить экземпляр HttpsURLConnection, мы должны вызвать метод openConnection для java.net.URL.Метод getNotAfter из X509Certificate возвращает дату истечения срока действия сертификата.

В 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"
0 голосов
/ 10 февраля 2019

Вы можете использовать shell для выполнения вашей команды.Например:

user=> (use '[clojure.java.shell :only [sh]])

user=> (println (:out (sh "openssl" "s_client" "-connect" "google.com:443")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...