Read, download, analyze and verify X.509 certificates.
Usage
cert_verify(cert, root = ca_bundle())
download_ssl_cert(host = "localhost", port = 443, ipv4_only = FALSE)
ca_bundle()Examples
# \donttest{
# Verify the r-project HTTPS cert
chain <- download_ssl_cert("cran.r-project.org", 443)
print(chain)
#> [[1]]
#> [x509 certificate] *.r-project.org
#> md5: 91a667ba14b84a6033a60b4f1909c000
#> sha1: d2f60e84fc56005c46a9633bf276edfcbd9e4b4d
#>
#> [[2]]
#> [x509 certificate] Sectigo Public Server Authentication CA DV R36
#> md5: 82d9d103e117bd01605da2f741150e01
#> sha1: dd55b4520291e276588f0dd02fafd83a7368e0fa
#>
#> [[3]]
#> [x509 certificate] Sectigo Public Server Authentication Root R46
#> md5: 370a3db0214d7022665f8304082a1c10
#> sha1: 2b18947a6a9fc7764fd8b5fb18a863b0c6dac24f
#>
#> [[4]]
#> [x509 certificate] USERTrust RSA Certification Authority
#> md5: 1bfe69d191b71933a372a80fe155e5b5
#> sha1: 2b8f1b57330dbba2d07a6c51f70ee90ddab9ad8e
#>
cert_data <- as.list(chain[[1]])
print(cert_data$pubkey)
#> [2048-bit rsa public key]
#> md5: 6b372d9b5c5759fbb28baf03c609730a
#> sha256: a76811fbe1608aeeb74f077b63e07c8fea82fdf4789c01c7b5b975a8958eb12b
print(cert_data$alt_names)
#> [1] "*.r-project.org" "r-project.org"
cert_verify(chain, ca_bundle())
#> [1] TRUE
# Write cert in PEM format
cat(write_pem(chain[[1]]))
#> -----BEGIN CERTIFICATE-----
#> MIIGlzCCBP+gAwIBAgIRAOATnftQ8FWZammpQydfgZkwDQYJKoZIhvcNAQELBQAw
#> YDELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRlZDE3MDUGA1UE
#> AxMuU2VjdGlnbyBQdWJsaWMgU2VydmVyIEF1dGhlbnRpY2F0aW9uIENBIERWIFIz
#> NjAeFw0yNTEyMTYwMDAwMDBaFw0yNzAxMTYyMzU5NTlaMBoxGDAWBgNVBAMMDyou
#> ci1wcm9qZWN0Lm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAND9
#> zHwfIxb1IIsmwL9QppOH9GyRDfct6JzLSmuUFzYObdOT+bUOftynAZlCuxLhqTUh
#> pXlauh4mNZTMSJokfkrLi8k4ZYlhehfDlMcMXGtpoKTgI939xC4WR7NjqK4Rg5G4
#> 1ii6RX3GBeF9oYk3grwZqfoeLyzJjoeqc6JK3zzsZRlyQ7tNAXdGKyE+VsvPHQbX
#> uKeWGKAMW2gV6cb/HTjcTCQgUnqnPWMDyH9Szb1HDX7zncDA1n+c6m1pQWS7pbe5
#> eB/hMthSfo3M9IpjqUnfiClKgFVAghTyGPPZjdzCUjOBCevDaqXMOYWaJm2M9Noy
#> u8HOzlAd+yA4Ee9zmP8CAwEAAaOCAxAwggMMMB8GA1UdIwQYMBaAFGjAEhYYDq/O
#> 9oemMlejRlFdywcnMB0GA1UdDgQWBBQJyDIIYAoKuRbmYGVtoM9990a9MjAOBgNV
#> HQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYI
#> KwYBBQUHAwIwSQYDVR0gBEIwQDA0BgsrBgEEAbIxAQICBzAlMCMGCCsGAQUFBwIB
#> FhdodHRwczovL3NlY3RpZ28uY29tL0NQUzAIBgZngQwBAgEwgYQGCCsGAQUFBwEB
#> BHgwdjBPBggrBgEFBQcwAoZDaHR0cDovL2NydC5zZWN0aWdvLmNvbS9TZWN0aWdv
#> UHVibGljU2VydmVyQXV0aGVudGljYXRpb25DQURWUjM2LmNydDAjBggrBgEFBQcw
#> AYYXaHR0cDovL29jc3Auc2VjdGlnby5jb20wKQYDVR0RBCIwIIIPKi5yLXByb2pl
#> Y3Qub3Jngg1yLXByb2plY3Qub3JnMIIBjgYKKwYBBAHWeQIEAgSCAX4EggF6AXgA
#> dgBgTJqven93XwHUBvySDciZ6wscffjJUhv6+hd3O5eLyQAAAZsnRzk4AAAEAwBH
#> MEUCIQCxIm0F7RQgp+vYN33STxMw1jxhadzJhm8WaNPrqYSBrgIgIQO2C3Kn7sjO
#> awZdXhVfEwZvHDS7JCrcTSGGn99CLQ4AfgCOykcLrN5q86IGsKR6hLdG/h/Gv5U+
#> JeabTuQCSPPG6AAAAZsnRzrKAAgAAAUAAH88FQQDAEcwRQIhAK+Y9368rCm0avM3
#> 1UrGZNiLwo9Id3GqHwtDPv+dsqYBAiBMBoMgP0n9UvPF7pKe2qkaBmgilZ6XARWO
#> e/QQ9jeNBQB+AFlubDOGlLJZcqJWyKDo3ZBKdugIPdqHOwEIOCgUPO5ZAAABmydH
#> OLIACAAABQAAAhIwBAMARzBFAiBuxGOQ4J76s27LZqqLACO1HNK9X/nqAAasa1rg
#> nBsV+wIhALZo7wOrXnzFQI8ZggTha9JQfOqQINBBl7nJtc6UBaJTMA0GCSqGSIb3
#> DQEBCwUAA4IBgQBT8oVqgK22SQ+SHQkf07mA/V+s83282Yg7Ncj6WMx8dhQcuW+x
#> UTy28FrDyyuPffHdEHgAlUabYlG9zIMzinvCivVBc80JYB4Jca58FilIf2k5ht/X
#> 3V8t7klnnu+pH8MBBrifzsF6SjsPWBgvzEpzEIN9PchS7FPWHR6ckLYQCYxkko7F
#> m4rvtDXh65B2ltXulQJExSW+Dqj3iWVNCGBcWASq7xDfvimHeerKMlEczAixIn6F
#> Jd5T+VcM+JPJDO0hb9ghnZGK0HZ23F1I+s16H2+73iWsj0oTlOhQFgKdcqxc4tqo
#> y363nxWOeP0A9IvSuSIN3KXvlbeVdSYKSooBL0on5UuxInA+4PH7XKk7aeEHWBzC
#> djgvQViuer9QLqSJDL8qBLBMqcPIb9fJXWuFAXGirvZVqI6IwUSRWllOBc5MGEbx
#> HWrmdG7IbyQwVxkiSsnooKZUohYADY6iYnxo3muaPtCZ3qjJSlhLMQOPvgDVXJMR
#> grxKgkovGqr7Ph4=
#> -----END CERTIFICATE-----
# }