

{"id":12636,"date":"2020-01-29T07:35:05","date_gmt":"2020-01-29T12:35:05","guid":{"rendered":"https:\/\/rud.is\/b\/?p=12636"},"modified":"2020-01-30T07:32:21","modified_gmt":"2020-01-30T12:32:21","slug":"monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt","status":"publish","type":"post","link":"https:\/\/rud.is\/b\/2020\/01\/29\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\/","title":{"rendered":"Monitoring Website SSL\/TLS Certificate Expiration Times with R, {openssl}, {pushoverr}, and {DT}"},"content":{"rendered":"<p>macOS R users who tend to work on the bleeding edge likely noticed some downtime at &lt;mac.r-project.org> this past weekend. Part of the issue was an SSL\/TLS certificate expiration situation. Moving forward, we can monitor this with R using the super spiffy {openssl} and {pushoverr} packages whilst also generating a daily report with {rmarkdown} and {DT}.<\/p>\n<h3>The Basic Process<\/h3>\n<p>The {openssl} package has a handy function &#8212; <code>download_ssl_cert()<\/code> &#8212; which will, by default, hit a given host on the standard HTTPS port (443\/TCP) and grab the site certificate and issuer. We&#8217;ll grab the &#8220;validity end&#8221; field and convert that to a date to use for comparison.<\/p>\n<p>To get the target list of sites to check I used <a href=\"https:\/\/opendata.rapid7.com\/sonar.fdns_v2\/\">Rapid7&#8217;s FDNS data set<\/a> and a glance at a few certificate transparency logs to put together a current list of &#8220;r-project&#8221; domains that have been known to have SSL certs. This process could be made more dynamic, but things don&#8217;t change that quickly in r-project domain land.<\/p>\n<p>Finally, we use the {DT} package to build a pretty HTML table and the {pushoverr} package to send notifications at normal priority for certs expiring within a week and critical priority for certs that have expired (the package has excellent documentation which will guide you through setting up a <a href=\"https:\/\/pushover.net\/\">Pushover account<\/a>).<\/p>\n<p>I put this all in a plain R script named <code>r-project-ssl-notify.R<\/code> that&#8217;s then called from a Linux CRON job which runs:<\/p>\n<pre><code class=\"language-shell\">\/usr\/bin\/Rscript -e 'rmarkdown::render(input=\"PATH_TO\/r-project-ssl-notify.R\", output_file=\"PATH_TO\/r-project-cert-status\/index.html\", quiet=TRUE)'\n<\/code><\/pre>\n<p>once a day at 0930 ET to make <a href=\"https:\/\/rud.is\/r-project-cert-status\/\">this status page<\/a> and also fire off any notifications which I have going to my watch and phone (I did a test send by expanding the delta to 14 days):<\/p>\n<p><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/rud.is\/dl\/notif-watch.png?w=510&#038;ssl=1\" alt=\"watch\" \/><\/p>\n<p><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/rud.is\/dl\/notif-phone.png?w=510&#038;ssl=1\" alt=\"phone\" \/><\/p>\n<p>Here&#8217;s the contents of<\/p>\n<pre><code class=\"language-r\">#' ---\n#' title: \"r-project SSL\/TLS Certificate Status\"\n#' date: \"`r format(Sys.time(), '%Y-%m-%d')`\"\n#' output:\n#'   html_document:\n#'     keep_md: false\n#'     theme: simplex\n#'     highlight: monochrome\n#' ---\n#+ init, include=FALSE\nknitr::opts_chunk$set(\n  message = FALSE, \n  warning = FALSE, \n  echo = FALSE, \n  collapse=TRUE\n)\n\n#+ libs\nlibrary(DT)\nlibrary(openssl)\nlibrary(pushoverr)\nlibrary(tidyverse)\n\n# Setup -----------------------------------------------------------------------------------------------------------\n\n# This env config file contains two lines:\n#\n# PUSHOVER_USER=YOUR_PUSHOVER_USER_STRING\n# PUSHOVER_APP=YOUR_PUSHOVER_APP_KEY\n#\n# See the {pushoverr} package for how to setup your Pushover account\nreadRenviron(\"~\/jobs\/conf\/r-project-ssl-notify.env\")\n\n\n# Check certs -----------------------------------------------------------------------------------------------------\n\n# r-project.org domains retrieved from Rapid7's FDNS data set\n# (https:\/\/opendata.rapid7.com\/sonar.fdns_v2\/) and cert transparency logs\n\n#+ work\nc(\n  \"beta.r-project.org\", \"bugs.r-project.org\", \"cloud.r-project.org\", \n  \"cran-archive.r-project.org\", \"cran.at.r-project.org\", \"cran.ch.r-project.org\", \n  \"cran.es.r-project.org\", \"cran.r-project.org\", \"cran.uk.r-project.org\", \n  \"cran.us.r-project.org\", \"developer.r-project.org\", \"ess.r-project.org\", \n  \"ftp.cran.r-project.org\", \"journal.r-project.org\", \"lists.r-forge.r-project.org\", \n  \"mac.r-project.org\", \"r-project.org\", \"svn.r-project.org\", \"translation.r-project.org\", \n  \"user2011.r-project.org\", \"user2014.r-project.org\", \"user2016.r-project.org\", \n  \"user2018.r-project.org\", \"user2019.r-project.org\", \"user2020.r-project.org\", \n  \"user2020muc.r-project.org\", \"win-builder.r-project.org\", \"www.cran.r-project.org\", \n  \"www.r-project.org\", \"www.user2019.fr\"\n) -&gt; r_doms\n\n# grab each cert\n\nr_certs &lt;- map(r_doms, openssl::download_ssl_cert)\n\n# make a nice table\ntibble(\n  dom = r_doms,\n  expires = map_chr(r_certs, ~.x[[1]][[\"validity\"]][[2]]) %&gt;% # this gets us the \"validity end\"\n    as.Date(format = \"%b %d %H:%M:%S %Y\", tz = \"GMT\"),        # and converts it to a date object\n  delta = as.numeric(expires - Sys.Date(), \"days\")            # this computes the delta from the day this script was called\n) %&gt;% \n  arrange(expires) -&gt; r_certs_expir\n\n# Status page generation ------------------------------------------------------------------------------------------\n\n# output nice table  \nDT::datatable(r_certs_expir, list(pageLength = nrow(r_certs_expir))) # if the # of r-proj doms gets too large we'll cap this for pagination\n\n# Notifications ---------------------------------------------------------------------------------------------------\n\n# See if we need to notify abt things expiring within 1 week\n# REMOVE THIS or edit the delta max if you want less noise\none_week &lt;- filter(r_certs_expir, between(delta, 1, 7))\nif (nrow(one_week) &gt; 0) {\n  pushover_normal(\n    title = \"There are r-project SSL Certs Expiring Within 1 Week\", \n    message = \"Check which ones: https:\/\/rud.is\/r-project-cert-status\"\n  )\n}\n\n# See if we have expired certs\nexpired &lt;- filter(r_certs_expir, delta &lt;= 0)\nif (nrow(expired) &gt; 0) {\n  pushover_critical(\n    title = \"There are expired r-project SSL Certs!\", \n    message = \"Check which ones: https:\/\/rud.is\/r-project-cert-status\"\n  )\n}\n<\/code><\/pre>\n<h3>FIN<\/h3>\n<p>With just a tiny bit of R code we have the ability to monitor expiring SSL certs via a diminutive status page and alerts to any\/all devices at our disposal.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>macOS R users who tend to work on the bleeding edge likely noticed some downtime at &lt;mac.r-project.org> this past weekend. Part of the issue was an SSL\/TLS certificate expiration situation. Moving forward, we can monitor this with R using the super spiffy {openssl} and {pushoverr} packages whilst also generating a daily report with {rmarkdown} and [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":3,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":""},"categories":[91],"tags":[],"class_list":["post-12636","post","type-post","status-publish","format-standard","hentry","category-r"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Monitoring Website SSL\/TLS Certificate Expiration Times with R, {openssl}, {pushoverr}, and {DT} - rud.is<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/rud.is\/b\/2020\/01\/29\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Monitoring Website SSL\/TLS Certificate Expiration Times with R, {openssl}, {pushoverr}, and {DT} - rud.is\" \/>\n<meta property=\"og:description\" content=\"macOS R users who tend to work on the bleeding edge likely noticed some downtime at &lt;mac.r-project.org&gt; this past weekend. Part of the issue was an SSL\/TLS certificate expiration situation. Moving forward, we can monitor this with R using the super spiffy {openssl} and {pushoverr} packages whilst also generating a daily report with {rmarkdown} and [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rud.is\/b\/2020\/01\/29\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\/\" \/>\n<meta property=\"og:site_name\" content=\"rud.is\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-29T12:35:05+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-01-30T12:32:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/rud.is\/dl\/notif-watch.png\" \/>\n<meta name=\"author\" content=\"hrbrmstr\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"hrbrmstr\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2020\\\/01\\\/29\\\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2020\\\/01\\\/29\\\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\\\/\"},\"author\":{\"name\":\"hrbrmstr\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"headline\":\"Monitoring Website SSL\\\/TLS Certificate Expiration Times with R, {openssl}, {pushoverr}, and {DT}\",\"datePublished\":\"2020-01-29T12:35:05+00:00\",\"dateModified\":\"2020-01-30T12:32:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2020\\\/01\\\/29\\\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\\\/\"},\"wordCount\":328,\"commentCount\":7,\"publisher\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"image\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2020\\\/01\\\/29\\\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/rud.is\\\/dl\\\/notif-watch.png\",\"articleSection\":[\"R\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/rud.is\\\/b\\\/2020\\\/01\\\/29\\\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2020\\\/01\\\/29\\\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\\\/\",\"url\":\"https:\\\/\\\/rud.is\\\/b\\\/2020\\\/01\\\/29\\\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\\\/\",\"name\":\"Monitoring Website SSL\\\/TLS Certificate Expiration Times with R, {openssl}, {pushoverr}, and {DT} - rud.is\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2020\\\/01\\\/29\\\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2020\\\/01\\\/29\\\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/rud.is\\\/dl\\\/notif-watch.png\",\"datePublished\":\"2020-01-29T12:35:05+00:00\",\"dateModified\":\"2020-01-30T12:32:21+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2020\\\/01\\\/29\\\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/rud.is\\\/b\\\/2020\\\/01\\\/29\\\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2020\\\/01\\\/29\\\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\\\/#primaryimage\",\"url\":\"https:\\\/\\\/rud.is\\\/dl\\\/notif-watch.png\",\"contentUrl\":\"https:\\\/\\\/rud.is\\\/dl\\\/notif-watch.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2020\\\/01\\\/29\\\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/rud.is\\\/b\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Monitoring Website SSL\\\/TLS Certificate Expiration Times with R, {openssl}, {pushoverr}, and {DT}\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#website\",\"url\":\"https:\\\/\\\/rud.is\\\/b\\\/\",\"name\":\"rud.is\",\"description\":\"&quot;In God we trust. All others must bring data&quot;\",\"publisher\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/rud.is\\\/b\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\",\"name\":\"hrbrmstr\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/ukr-shield.png?fit=460%2C460&ssl=1\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/ukr-shield.png?fit=460%2C460&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/ukr-shield.png?fit=460%2C460&ssl=1\",\"width\":460,\"height\":460,\"caption\":\"hrbrmstr\"},\"logo\":{\"@id\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/ukr-shield.png?fit=460%2C460&ssl=1\"},\"description\":\"Don't look at me\u2026I do what he does \u2014 just slower. #rstats avuncular \u2022 ?Resistance Fighter \u2022 Cook \u2022 Christian \u2022 [Master] Chef des Donn\u00e9es de S\u00e9curit\u00e9 @ @rapid7\",\"sameAs\":[\"http:\\\/\\\/rud.is\"],\"url\":\"https:\\\/\\\/rud.is\\\/b\\\/author\\\/hrbrmstr\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Monitoring Website SSL\/TLS Certificate Expiration Times with R, {openssl}, {pushoverr}, and {DT} - rud.is","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/rud.is\/b\/2020\/01\/29\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\/","og_locale":"en_US","og_type":"article","og_title":"Monitoring Website SSL\/TLS Certificate Expiration Times with R, {openssl}, {pushoverr}, and {DT} - rud.is","og_description":"macOS R users who tend to work on the bleeding edge likely noticed some downtime at &lt;mac.r-project.org> this past weekend. Part of the issue was an SSL\/TLS certificate expiration situation. Moving forward, we can monitor this with R using the super spiffy {openssl} and {pushoverr} packages whilst also generating a daily report with {rmarkdown} and [&hellip;]","og_url":"https:\/\/rud.is\/b\/2020\/01\/29\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\/","og_site_name":"rud.is","article_published_time":"2020-01-29T12:35:05+00:00","article_modified_time":"2020-01-30T12:32:21+00:00","og_image":[{"url":"https:\/\/rud.is\/dl\/notif-watch.png","type":"","width":"","height":""}],"author":"hrbrmstr","twitter_card":"summary_large_image","twitter_misc":{"Written by":"hrbrmstr","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/rud.is\/b\/2020\/01\/29\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\/#article","isPartOf":{"@id":"https:\/\/rud.is\/b\/2020\/01\/29\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\/"},"author":{"name":"hrbrmstr","@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"headline":"Monitoring Website SSL\/TLS Certificate Expiration Times with R, {openssl}, {pushoverr}, and {DT}","datePublished":"2020-01-29T12:35:05+00:00","dateModified":"2020-01-30T12:32:21+00:00","mainEntityOfPage":{"@id":"https:\/\/rud.is\/b\/2020\/01\/29\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\/"},"wordCount":328,"commentCount":7,"publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"image":{"@id":"https:\/\/rud.is\/b\/2020\/01\/29\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\/#primaryimage"},"thumbnailUrl":"https:\/\/rud.is\/dl\/notif-watch.png","articleSection":["R"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/rud.is\/b\/2020\/01\/29\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/rud.is\/b\/2020\/01\/29\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\/","url":"https:\/\/rud.is\/b\/2020\/01\/29\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\/","name":"Monitoring Website SSL\/TLS Certificate Expiration Times with R, {openssl}, {pushoverr}, and {DT} - rud.is","isPartOf":{"@id":"https:\/\/rud.is\/b\/#website"},"primaryImageOfPage":{"@id":"https:\/\/rud.is\/b\/2020\/01\/29\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\/#primaryimage"},"image":{"@id":"https:\/\/rud.is\/b\/2020\/01\/29\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\/#primaryimage"},"thumbnailUrl":"https:\/\/rud.is\/dl\/notif-watch.png","datePublished":"2020-01-29T12:35:05+00:00","dateModified":"2020-01-30T12:32:21+00:00","breadcrumb":{"@id":"https:\/\/rud.is\/b\/2020\/01\/29\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rud.is\/b\/2020\/01\/29\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/rud.is\/b\/2020\/01\/29\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\/#primaryimage","url":"https:\/\/rud.is\/dl\/notif-watch.png","contentUrl":"https:\/\/rud.is\/dl\/notif-watch.png"},{"@type":"BreadcrumbList","@id":"https:\/\/rud.is\/b\/2020\/01\/29\/monitoring-website-ssl-tls-certificate-expiration-times-with-r-openssl-pushoverr-and-dt\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/rud.is\/b\/"},{"@type":"ListItem","position":2,"name":"Monitoring Website SSL\/TLS Certificate Expiration Times with R, {openssl}, {pushoverr}, and {DT}"}]},{"@type":"WebSite","@id":"https:\/\/rud.is\/b\/#website","url":"https:\/\/rud.is\/b\/","name":"rud.is","description":"&quot;In God we trust. All others must bring data&quot;","publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/rud.is\/b\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886","name":"hrbrmstr","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","contentUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","width":460,"height":460,"caption":"hrbrmstr"},"logo":{"@id":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1"},"description":"Don't look at me\u2026I do what he does \u2014 just slower. #rstats avuncular \u2022 ?Resistance Fighter \u2022 Cook \u2022 Christian \u2022 [Master] Chef des Donn\u00e9es de S\u00e9curit\u00e9 @ @rapid7","sameAs":["http:\/\/rud.is"],"url":"https:\/\/rud.is\/b\/author\/hrbrmstr\/"}]}},"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p23idr-3hO","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":11759,"url":"https:\/\/rud.is\/b\/2019\/01\/10\/roll-your-own-federal-government-shutdown-caused-ssl-certificate-expiration-monitor-in-r\/","url_meta":{"origin":12636,"position":0},"title":"Roll Your Own Federal Government Shutdown-caused SSL Certificate Expiration Monitor in R","author":"hrbrmstr","date":"2019-01-10","format":false,"excerpt":"By now, even remote villages on uncharted islands in the Pacific know that the U.S. is in the midst of a protracted partial government shutdown. It's having real impacts on the lives of Federal government workers but they aren't the only ones. Much of the interaction Federal agencies have with\u2026","rel":"","context":"In &quot;R&quot;","block_context":{"text":"R","link":"https:\/\/rud.is\/b\/category\/r\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/plot_zoom_png-1.png?fit=1200%2C512&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/plot_zoom_png-1.png?fit=1200%2C512&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/plot_zoom_png-1.png?fit=1200%2C512&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/plot_zoom_png-1.png?fit=1200%2C512&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/plot_zoom_png-1.png?fit=1200%2C512&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":4357,"url":"https:\/\/rud.is\/b\/2016\/05\/01\/pining-for-the-fjords-monitoring-ssltls-certificate-expiration-in-r-with-flexdashboard\/","url_meta":{"origin":12636,"position":1},"title":"Pining for the fjoRds &#038; monitoring SSL\/TLS certificate expiration in R with flexdashboard","author":"hrbrmstr","date":"2016-05-01","format":false,"excerpt":"Rumors of my demise have been (almost) greatly exaggerated. Folks have probably noticed that #52Vis has stalled, as has most blogging, package & Twitter activity. I came down with a nasty bout of bronchitis after attending rOpenSci Unconf 16 (there were _so_ many people hacking [the sick kind] up a\u2026","rel":"","context":"In &quot;dashboard&quot;","block_context":{"text":"dashboard","link":"https:\/\/rud.is\/b\/category\/dashboard\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/05\/Fullscreen_5_1_16__9_28_PM.png?fit=1200%2C609&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/05\/Fullscreen_5_1_16__9_28_PM.png?fit=1200%2C609&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/05\/Fullscreen_5_1_16__9_28_PM.png?fit=1200%2C609&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/05\/Fullscreen_5_1_16__9_28_PM.png?fit=1200%2C609&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/05\/Fullscreen_5_1_16__9_28_PM.png?fit=1200%2C609&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":11659,"url":"https:\/\/rud.is\/b\/2018\/11\/17\/tis-the-season-to-check-your-ssl-tls-cipher-list-thrice-rcurl-curl-openssl\/","url_meta":{"origin":12636,"position":2},"title":"Tis the Season to Check your SSL\/TLS Cipher List Thrice (RCurl\/curl\/openssl)","author":"hrbrmstr","date":"2018-11-17","format":false,"excerpt":"The libcurl library (the foundational library behind the RCurl and curl packages) has switched to using OpenSSL's default ciphers since version 7.56.0 (October 4 2017). If you're a regular updater of curl\/httr you should be fairly current with these cipher suites, but if you're not a keen updater or use\u2026","rel":"","context":"In &quot;R&quot;","block_context":{"text":"R","link":"https:\/\/rud.is\/b\/category\/r\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":11685,"url":"https:\/\/rud.is\/b\/2018\/12\/23\/certifiably-gone-phishing\/","url_meta":{"origin":12636,"position":3},"title":"Certifiably Gone Phishing","author":"hrbrmstr","date":"2018-12-23","format":false,"excerpt":"Phishing is [still] the primary way attackers either commit a primary criminal act (i.e. phish a target to, say, install ransomware) or is the initial vehicle used to gain a foothold in an organization so they can perform other criminal operations to achieve some goal. As such, security teams, vendors\u2026","rel":"","context":"In &quot;Cybersecurity&quot;","block_context":{"text":"Cybersecurity","link":"https:\/\/rud.is\/b\/category\/cybersecurity\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":588,"url":"https:\/\/rud.is\/b\/2011\/06\/14\/weis-2011-session-2-identity-the-inconvenient-truth-about-web-certificates\/","url_meta":{"origin":12636,"position":4},"title":"WEIS 2011 :: Session 2 :: Identity :: The Inconvenient Truth About Web Certificates","author":"hrbrmstr","date":"2011-06-14","format":false,"excerpt":"Nevena Vratonjic Julien Freudiger Vincent Bindschaedler Jeane-Pierre Hubaux Presentation [PDF] Twitter transcript #weis2011 Overview of basic ssl\/tls\/https concepts. Asking: how prevalent is https, what are problems with https? #weis2011 Out of their large sample, only 1\/3 (34.7%) have support for https, login is worse! only 22.6% < #data! #weis2011 (me)\u2026","rel":"","context":"In &quot;Certificates&quot;","block_context":{"text":"Certificates","link":"https:\/\/rud.is\/b\/category\/certificates\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":12790,"url":"https:\/\/rud.is\/b\/2020\/07\/10\/a-look-at-pan-os-versions-with-a-bit-of-r\/","url_meta":{"origin":12636,"position":5},"title":"A Look at PAN-OS Versions with a Bit of R","author":"hrbrmstr","date":"2020-07-10","format":false,"excerpt":"The incredibly talented folks over at Bishop Fox were quite generous this week, providing a scanner for figuring out PAN-OS GlobalProtect versions. I've been using their decoding technique and date-based fingerprint table to keep an eye on patch status (over at $DAYJOB we help customers, organizations, and national cybersecurity centers\u2026","rel":"","context":"In &quot;Cybersecurity&quot;","block_context":{"text":"Cybersecurity","link":"https:\/\/rud.is\/b\/category\/cybersecurity\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/12636","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/comments?post=12636"}],"version-history":[{"count":0,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/12636\/revisions"}],"wp:attachment":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/media?parent=12636"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/categories?post=12636"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/tags?post=12636"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}