@ -1,12 +1,19 @@
<!-- README.md is generated from README.Rmd. Please edit that file -->
<!-- README.md is generated from README.Rmd. Please edit that file -->
<!--
[![Build Status ](https://travis-ci.org/hrbrmstr/ssllabs.svg )](https://travis-ci.org/hrbrmstr/ssllabs)
# ssllabs
![Project Status: Concept - Minimal or no implementation has been done yet. ](http://www.repostatus.org/badges/0.1.0/concept.svg )](http://www.repostatus.org/#concept)
[![CRAN_Status_Badge ](http://www.r-pkg.org/badges/version/ssllabs )](http://cran.r-project.org/web/packages/ssllabs)
Interrogate SSL Certificate Configuration Efficacy via ‘ssllabs’ API
![downloads ](http://cranlogs.r-pkg.org/badges/grand-total/ssllabs )
-->
## Description
`ssllabs` : Tools to Work with the `SSL Labs` `API`
‘Qualys’ provides a free online service
(< https: / / www . ssllabs . com / ssltest / index . html > ) that performs a deep
analysis of the configuration of any SSL web server on the public
Internet. Methods are provides to initiate scans and retreive scan
results.
## What’s Inside the Tin?
The following functions are implemented:
The following functions are implemented:
@ -14,277 +21,230 @@ The following functions are implemented:
- `get_endpoint_data` : Retrieve detailed endpoint information
- `get_endpoint_data` : Retrieve detailed endpoint information
- `get_root_certs_raw` : Retrieve root certificates
- `get_root_certs_raw` : Retrieve root certificates
- `get_status_codes` : Retrieve known status codes
- `get_status_codes` : Retrieve known status codes
- `ssllabs` : Tools to Work with the 'SSL Labs' 'API'
- `ssllabs` : Tools to Work with the ‘SSL Labs’ ‘API’
- `ssllabs_api_info` : Check SSL Labs availability
- `ssllabs_api_info` : Check SSL Labs availability
### Installation
## Installation
``` r
``` r
devtools::install_github("hrbrmstr/ssllabs ")
install.packages("ssllabs", repos = "https://cinc.rud.is/ ")
```
```
### Usage
## Usage
``` r
``` r
library(ssllabs)
library(ssllabs)
# current verison
# current verison
packageVersion("ssllabs")
packageVersion("ssllabs")
#> [1] '0.1.0.9000'
## [1] '0.1.0.9000'
ssllabs_api_info()
ssllabs_api_info() %>%
#> $engineVersion
str(1)
#> [1] "1.22.37"
## List of 7
#>
## $ engineVersion : chr "1.32.16"
#> $criteriaVersion
## $ criteriaVersion : chr "2009p"
#> [1] "2009l"
## $ clientMaxAssessments: int 24
#>
## $ maxAssessments : int 24
#> $clientMaxAssessments
## $ currentAssessments : int 0
#> [1] 25
## $ newAssessmentCoolOff: int 1000
#>
## $ messages : chr "This assessment service is provided free of charge by Qualys SSL Labs, subject to our terms and conditions: htt"| __truncated__
#> $maxAssessments
#> [1] 25
get_status_codes() %>%
#>
str(2)
#> $currentAssessments
## List of 1
#> [1] 1
## $ statusDetails:List of 58
#>
## ..$ TESTING_STRICT_RI : chr "Testing Strict Renegotiation"
#> $newAssessmentCoolOff
## ..$ TESTING_PROTOCOL_INTOLERANCE_304: chr "Testing Protocol Intolerance (TLS 1.3)"
#> [1] 1000
## ..$ TESTING_HANDSHAKE_SIMULATION : chr "Simulating handshakes"
#>
## ..$ TESTING_CVE_2014_0224 : chr "Testing CVE-2014-0224"
#> $messages
## ..$ TESTING_PROTO_3_2_V2H : chr "Testing TLS 1.1 (v2 handshake)"
#> [1] "This assessment service is provided free of charge by Qualys SSL Labs, subject to our terms and conditions: https://www.ssllabs.com/about/terms.html"
## ..$ TESTING_HEARTBLEED : chr "Testing Heartbleed"
## ..$ TESTING_RENEGOTIATION : chr "Testing renegotiation"
get_status_codes()
## ..$ TESTING_PROTOCOL_INTOLERANCE_300: chr "Testing Protocol Intolerance (SSL 3.0)"
#> $statusDetails
## ..$ TESTING_ECDHE_PARAMETER_REUSE : chr "Testing ECDHE parameter reuse"
#> $statusDetails$TESTING_PROTOCOL_INTOLERANCE_399
## ..$ TESTING_SUITES_BULK : chr "Bulk-testing less common cipher suites"
#> [1] "Testing Protocol Intolerance (TLS 1.99)"
## ..$ TESTING_PROTO_3_1_V2H : chr "Testing TLS 1.0 (v2 handshake)"
#>
## ..$ TESTING_PROTOCOL_INTOLERANCE_301: chr "Testing Protocol Intolerance (TLS 1.0)"
#> $statusDetails$PREPARING_REPORT
## ..$ TESTING_PROTOCOL_INTOLERANCE_302: chr "Testing Protocol Intolerance (TLS 1.1)"
#> [1] "Preparing the report"
## ..$ BUILDING_TRUST_PATHS : chr "Building trust paths"
#>
## ..$ TESTING_PROTOCOL_INTOLERANCE_303: chr "Testing Protocol Intolerance (TLS 1.2)"
#> $statusDetails$TESTING_SESSION_RESUMPTION
## ..$ TESTING_PROTO_3_0 : chr "Testing SSL 3.0"
#> [1] "Testing session resumption"
## ..$ TESTING_DROWN : chr "Testing for DROWN"
#>
## ..$ TESTING_PROTO_3_1 : chr "Testing TLS 1.0"
#> $statusDetails$TESTING_NPN
## ..$ TESTING_PROTO_3_3_V2H : chr "Testing TLS 1.1 (v2 handshake)"
#> [1] "Testing NPN"
## ..$ TESTING_SUITE_PREFERENCE : chr "Determining cipher suite preference"
#>
## ..$ TESTING_TLS_VERSION_INTOLERANCE : chr "Testing TLS version intolerance"
#> $statusDetails$RETRIEVING_CERT_V3__NO_SNI
## ..$ VALIDATING_TRUST_PATHS : chr "Validating trust paths"
#> [1] "Retrieving certificate"
## ..$ TESTING_LONG_HANDSHAKE : chr "Testing Long Handshake (might take a while)"
#>
## ..$ TESTING_SUITES_DEPRECATED : chr "Testing deprecated cipher suites"
#> $statusDetails$RETRIEVING_CERT_V3__SNI_APEX
## ..$ TESTING_TICKETBLEED : chr "Testing Ticketbleed"
#> [1] "Retrieving certificate"
## ..$ RETRIEVING_CERT_V3__SNI_APEX : chr "Retrieving certificate"
#>
## ..$ TESTING_SESSION_TICKETS : chr "Testing Session Ticket support"
#> $statusDetails$TESTING_CVE_2014_0224
## ..$ TESTING_PROTO_3_4 : chr "Testing TLS 1.3"
#> [1] "Testing CVE-2014-0224"
## ..$ TESTING_PROTOCOL_INTOLERANCE_499: chr "Testing Protocol Intolerance (TLS 2.152)"
#>
## ..$ TESTING_PROTO_3_2 : chr "Testing TLS 1.1"
#> $statusDetails$TESTING_CAPABILITIES
## ..$ TESTING_PROTO_3_3 : chr "Testing TLS 1.2"
#> [1] "Determining server capabilities"
## ..$ RETRIEVING_CERT_V3__SNI_WWW : chr "Retrieving certificate"
#>
## ..$ TESTING_SUITES_NO_SNI : chr "Observed extra suites during simulation, Testing cipher suites without SNI support"
#> $statusDetails$TESTING_HEARTBLEED
## ..$ TESTING_CAPABILITIES : chr "Determining server capabilities"
#> [1] "Testing Heartbleed"
## ..$ TESTING_EXTENSION_INTOLERANCE : chr "Testing Extension Intolerance (might take a while)"
#>
## ..$ TESTING_EC_NAMED_CURVES : chr "Determining supported named groups"
#> $statusDetails$TESTING_PROTO_3_3_V2H
## ..$ TESTING_NPN : chr "Testing NPN"
#> [1] "Testing TLS 1.1 (v2 handshake)"
## ..$ TESTING_POODLE_TLS : chr "Testing POODLE against TLS"
#>
## ..$ CHECKING_REVOCATION : chr "Checking for revoked certificates"
#> $statusDetails$TESTING_SESSION_TICKETS
## ..$ TESTING_BEAST : chr "Testing for BEAST"
#> [1] "Testing Session Ticket support"
## ..$ TESTING_COMPRESSION : chr "Testing compression"
#>
## ..$ RETRIEVING_CERT_V3__NO_SNI : chr "Retrieving certificate"
#> $statusDetails$VALIDATING_TRUST_PATHS
## ..$ RETRIEVING_CERT_TLS13 : chr "Retrieving certificate"
#> [1] "Validating trust paths"
## ..$ TESTING_PROTO_2_0 : chr "Testing SSL 2.0"
#>
## ..$ TESTING_ALPN : chr "Determining supported ALPN protocols"
#> $statusDetails$TESTING_RENEGOTIATION
## ..$ TESTING_OCSP_STAPLING_PRIME : chr "Trying to prime OCSP stapling"
#> [1] "Testing renegotiation"
## ..$ TESTING_SESSION_RESUMPTION : chr "Testing session resumption"
#>
## ..$ TESTING_OCSP_STAPLING : chr "Testing OCSP stapling"
#> $statusDetails$TESTING_HTTPS
## ..$ TESTING_PROTOCOL_INTOLERANCE_399: chr "Testing Protocol Intolerance (TLS 1.152)"
#> [1] "Sending one complete HTTPS request"
## ..$ TESTING_STRICT_SNI : chr "Testing Strict SNI"
#>
## ..$ TESTING_HTTPS : chr "Sending one complete HTTPS request"
#> $statusDetails$TESTING_V2H_HANDSHAKE
## ..$ PREPARING_REPORT : chr "Preparing the report"
#> [1] "Testing v2 handshake"
## ..$ TESTING_SSL2_SUITES : chr "Checking if SSL 2.0 has any ciphers enabled"
#>
## ..$ TESTING_SUITES : chr "Determining available cipher suites"
#> $statusDetails$TESTING_STRICT_RI
## ..$ TESTING_CVE_2016_2107 : chr "Testing CVE-2016-2107"
#> [1] "Testing Strict Renegotiation"
## ..$ TESTING_PROTO_3_0_V2H : chr "Testing SSL 3.0 (v2 handshake)"
#>
## ..$ TESTING_V2H_HANDSHAKE : chr "Testing v2 handshake"
#> $statusDetails$TESTING_SUITES_DEPRECATED
## ..$ TESTING_BLEICHENBACHER : chr "Testing Bleichenbacher"
#> [1] "Testing deprecated cipher suites"
#>
get_root_certs_raw() %>%
#> $statusDetails$TESTING_HANDSHAKE_SIMULATION
str(1)
#> [1] "Simulating handshakes"
## List of 8
#>
## $ subject : chr "CN=AAA Certificate Services,O=Comodo CA Limited,L=Salford,ST=Greater Manchester,C=GB"
#> $statusDetails$TESTING_STRICT_SNI
## $ issuer : chr "CN=AAA Certificate Services,O=Comodo CA Limited,L=Salford,ST=Greater Manchester,C=GB"
#> [1] "Testing Strict SNI"
## $ algorithm : chr "sha1WithRSAEncryption"
#>
## $ signature : raw [1:256] 08 56 fc 02 ...
#> $statusDetails$TESTING_PROTO_3_1_V2H
## $ validity : chr [1:2] "Jan 1 00:00:00 2004 GMT" "Dec 31 23:59:59 2028 GMT"
#> [1] "Testing TLS 1.0 (v2 handshake)"
## $ self_signed: logi TRUE
#>
## $ alt_names : NULL
#> $statusDetails$TESTING_PROTOCOL_INTOLERANCE_499
## $ pubkey :List of 5
#> [1] "Testing Protocol Intolerance (TLS 2.99)"
#>
analyze_site("rud.is") %>%
#> $statusDetails$TESTING_TLS_VERSION_INTOLERANCE
str(2)
#> [1] "Testing TLS version intolerance"
## List of 10
#>
## $ host : chr "rud.is"
#> $statusDetails$TESTING_PROTOCOL_INTOLERANCE_304
## $ port : int 443
#> [1] "Testing Protocol Intolerance (TLS 1.3)"
## $ protocol : chr "HTTP"
#>
## $ isPublic : logi FALSE
#> $statusDetails$TESTING_SUITES_BULK
## $ status : chr "READY"
#> [1] "Bulk-testing less common cipher suites"
## $ startTime : num 1.55e+12
#>
## $ testTime : num 1.55e+12
#> $statusDetails$TESTING_BEAST
## $ engineVersion : chr "1.32.16"
#> [1] "Testing for BEAST"
## $ criteriaVersion: chr "2009p"
#>
## $ endpoints :'data.frame': 2 obs. of 96 variables:
#> $statusDetails$TESTING_PROTO_2_0
## ..$ ipAddress : chr [1:2] "2602:ff16:3:0:0:0:4dfb:9ac5" "172.93.49.183"
#> [1] "Testing SSL 2.0"
## ..$ statusMessage : chr [1:2] "Ready" "Ready"
#>
## ..$ grade : chr [1:2] "A+" "A+"
#> $statusDetails$BUILDING_TRUST_PATHS
## ..$ gradeTrustIgnored : chr [1:2] "A+" "A+"
#> [1] "Building trust paths"
## ..$ hasWarnings : logi [1:2] FALSE FALSE
#>
## ..$ isExceptional : logi [1:2] TRUE TRUE
#> $statusDetails$TESTING_PROTO_3_1
## ..$ progress : int [1:2] 100 100
#> [1] "Testing TLS 1.0"
## ..$ duration : int [1:2] 41233 40519
#>
## ..$ eta : int [1:2] 6 3
#> $statusDetails$TESTING_PROTO_3_0_V2H
## ..$ delegation : int [1:2] 1 1
#> [1] "Testing SSL 3.0 (v2 handshake)"
## ..$ details.hostStartTime : num [1:2] 1.55e+12 1.55e+12
#>
## ..$ details.protocols :List of 2
#> $statusDetails$TESTING_PROTO_3_0
## ..$ details.serverSignature : chr [1:2] "nginx/1.15.9" "nginx/1.15.9"
#> [1] "Testing SSL 3.0"
## ..$ details.prefixDelegation : logi [1:2] FALSE FALSE
#>
## ..$ details.nonPrefixDelegation : logi [1:2] TRUE TRUE
#> $statusDetails$TESTING_PROTOCOL_INTOLERANCE_300
## ..$ details.vulnBeast : logi [1:2] FALSE FALSE
#> [1] "Testing Protocol Intolerance (SSL 3.0)"
## ..$ details.stsStatus : chr [1:2] "present" "present"
#>
## ..$ details.stsResponseHeader : chr [1:2] "max-age=31536000; includeSubDomains; preload" "max-age=31536000; includeSubDomains; preload"
#> $statusDetails$TESTING_PROTOCOL_INTOLERANCE_301
## ..$ details.stsMaxAge : int [1:2] 31536000 31536000
#> [1] "Testing Protocol Intolerance (TLS 1.0)"
## ..$ details.stsSubdomains : logi [1:2] TRUE TRUE
#>
## ..$ details.stsPreload : logi [1:2] TRUE TRUE
#> $statusDetails$TESTING_PROTOCOL_INTOLERANCE_302
## ..$ details.sessionResumption : int [1:2] 2 2
#> [1] "Testing Protocol Intolerance (TLS 1.1)"
## ..$ details.compressionMethods : int [1:2] 0 0
#>
## ..$ details.supportsNpn : logi [1:2] TRUE TRUE
#> $statusDetails$TESTING_PROTOCOL_INTOLERANCE_303
## ..$ details.npnProtocols : chr [1:2] "h2 http/1.1" "h2 http/1.1"
#> [1] "Testing Protocol Intolerance (TLS 1.2)"
## ..$ details.supportsAlpn : logi [1:2] TRUE TRUE
#>
## ..$ details.sessionTickets : int [1:2] 0 0
#> $statusDetails$TESTING_OCSP_STAPLING_PRIME
## ..$ details.ocspStapling : logi [1:2] TRUE TRUE
#> [1] "Trying to prime OCSP stapling"
## ..$ details.staplingRevocationStatus : int [1:2] 2 2
#>
## ..$ details.sniRequired : logi [1:2] TRUE TRUE
#> $statusDetails$TESTING_EXTENSION_INTOLERANCE
## ..$ details.httpStatusCode : int [1:2] 200 200
#> [1] "Testing Extension Intolerance (might take a while)"
## ..$ details.supportsRc4 : logi [1:2] FALSE FALSE
#>
## ..$ details.rc4WithModern : logi [1:2] FALSE FALSE
#> $statusDetails$TESTING_SSL2_SUITES
## ..$ details.rc4Only : logi [1:2] FALSE FALSE
#> [1] "Checking if SSL 2.0 has any ciphers enabled"
## ..$ details.forwardSecrecy : int [1:2] 4 4
#>
## ..$ details.protocolIntolerance : int [1:2] 0 0
#> $statusDetails$TESTING_OCSP_STAPLING
## ..$ details.miscIntolerance : int [1:2] 0 0
#> [1] "Testing OCSP stapling"
## ..$ details.heartbleed : logi [1:2] FALSE FALSE
#>
## ..$ details.heartbeat : logi [1:2] TRUE TRUE
#> $statusDetails$TESTING_SUITES
## ..$ details.openSslCcs : int [1:2] 1 1
#> [1] "Determining available cipher suites"
## ..$ details.openSSLLuckyMinus20 : int [1:2] 1 1
#>
## ..$ details.poodle : logi [1:2] FALSE FALSE
#> $statusDetails$TESTING_PROTO_3_2_V2H
## ..$ details.poodleTls : int [1:2] 1 1
#> [1] "Testing TLS 1.1 (v2 handshake)"
## ..$ details.freak : logi [1:2] FALSE FALSE
#>
## ..$ details.hasSct : int [1:2] 1 1
#> $statusDetails$TESTING_POODLE_TLS
## ..$ details.logjam : logi [1:2] FALSE FALSE
#> [1] "Testing POODLE against TLS"
## ..$ details.hstsPreloads :List of 2
#>
## ..$ details.drownHosts :List of 2
#> $statusDetails$RETRIEVING_CERT_V3__SNI_WWW
## ..$ details.drownErrors : logi [1:2] FALSE FALSE
#> [1] "Retrieving certificate"
## ..$ details.drownVulnerable : logi [1:2] FALSE FALSE
#>
## ..$ details.key.size : int [1:2] 2048 2048
#> $statusDetails$CHECKING_REVOCATION
## ..$ details.key.alg : chr [1:2] "RSA" "RSA"
#> [1] "Checking for revoked certificates"
## ..$ details.key.debianFlaw : logi [1:2] FALSE FALSE
#>
## ..$ details.key.strength : int [1:2] 2048 2048
#> $statusDetails$TESTING_COMPRESSION
## ..$ details.cert.subject : chr [1:2] "CN=rud.is" "CN=rud.is"
#> [1] "Testing compression"
## ..$ details.cert.commonNames :List of 2
#>
## ..$ details.cert.altNames :List of 2
#> $statusDetails$TESTING_SUITE_PREFERENCE
## ..$ details.cert.notBefore : num [1:2] 1.55e+12 1.55e+12
#> [1] "Determining cipher suite preference"
## ..$ details.cert.notAfter : num [1:2] 1.56e+12 1.56e+12
#>
## ..$ details.cert.issuerSubject : chr [1:2] "CN=Let's Encrypt Authority X3, O=Let's Encrypt, C=US" "CN=Let's Encrypt Authority X3, O=Let's Encrypt, C=US"
#> $statusDetails$TESTING_PROTO_3_2
## ..$ details.cert.issuerLabel : chr [1:2] "Let's Encrypt Authority X3" "Let's Encrypt Authority X3"
#> [1] "Testing TLS 1.1"
## ..$ details.cert.sigAlg : chr [1:2] "SHA256withRSA" "SHA256withRSA"
#>
## ..$ details.cert.revocationInfo : int [1:2] 2 2
#> $statusDetails$TESTING_PROTO_3_3
## ..$ details.cert.crlURIs :List of 2
#> [1] "Testing TLS 1.2"
## ..$ details.cert.ocspURIs :List of 2
#>
## ..$ details.cert.revocationStatus : int [1:2] 2 2
#> $statusDetails$TESTING_LONG_HANDSHAKE
## ..$ details.cert.crlRevocationStatus : int [1:2] 4 4
#> [1] "Testing Long Handshake (might take a while)"
## ..$ details.cert.ocspRevocationStatus : int [1:2] 2 2
## ..$ details.cert.sgc : int [1:2] 0 0
get_root_certs_raw()
## ..$ details.cert.issues : int [1:2] 0 0
#> [x509 certificate] AAA Certificate Services
## ..$ details.cert.sct : logi [1:2] TRUE TRUE
#> md5: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0
## ..$ details.cert.mustStaple : int [1:2] 0 0
#> sha1: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49
## ..$ details.cert.sha1Hash : chr [1:2] "11ddb41c60593c77c93c32da72dd6d10f3c017f7" "11ddb41c60593c77c93c32da72dd6d10f3c017f7"
## ..$ details.cert.pinSha256 : chr [1:2] "zx1eDaN0/w/ZvtwQW5wPWUunFkSGQ6Fp8uOOh4Qn85A=" "zx1eDaN0/w/ZvtwQW5wPWUunFkSGQ6Fp8uOOh4Qn85A="
analyze_site("rud.is")
## ..$ details.chain.certs :List of 2
#> $host
## ..$ details.chain.issues : int [1:2] 0 0
#> [1] "rud.is"
## ..$ details.suites.list :List of 2
#>
## ..$ details.suites.preference : logi [1:2] TRUE TRUE
#> $port
## ..$ details.sims.results :List of 2
#> [1] 443
## ..$ details.hstsPolicy.LONG_MAX_AGE : int [1:2] 15552000 15552000
#>
## ..$ details.hstsPolicy.header : chr [1:2] "max-age=31536000; includeSubDomains; preload" "max-age=31536000; includeSubDomains; preload"
#> $protocol
## ..$ details.hstsPolicy.status : chr [1:2] "present" "present"
#> [1] "HTTP"
## ..$ details.hstsPolicy.maxAge : int [1:2] 31536000 31536000
#>
## ..$ details.hstsPolicy.includeSubDomains : logi [1:2] TRUE TRUE
#> $isPublic
## ..$ details.hstsPolicy.preload : logi [1:2] TRUE TRUE
#> [1] FALSE
## ..$ details.hstsPolicy.directives.includesubdomains: chr [1:2] "" ""
#>
## ..$ details.hstsPolicy.directives.max-age : chr [1:2] "31536000" "31536000"
#> $status
## ..$ details.hstsPolicy.directives.preload : chr [1:2] "" ""
#> [1] "IN_PROGRESS"
## ..$ details.hpkpPolicy.status : chr [1:2] "absent" "absent"
#>
## ..$ details.hpkpPolicy.pins :List of 2
#> $startTime
## ..$ details.hpkpPolicy.matchedPins :List of 2
#> [1] 1.465096e+12
## ..$ details.hpkpPolicy.directives :List of 2
#>
## ..$ details.hpkpRoPolicy.status : chr [1:2] "absent" "absent"
#> $engineVersion
## ..$ details.hpkpRoPolicy.pins :List of 2
#> [1] "1.22.37"
## ..$ details.hpkpRoPolicy.matchedPins :List of 2
#>
## ..$ details.hpkpRoPolicy.directives :List of 2
#> $criteriaVersion
#> [1] "2009l"
#>
#> $endpoints
#> ipAddress statusMessage statusDetails statusDetailsMessage progress eta delegation
#> 1 104.236.112.222 In progress TESTING_OCSP_STAPLING Testing OCSP stapling 98 0 1
#> details.hostStartTime details.protocols details.serverSignature details.prefixDelegation
#> 1 1.465096e+12 769, 770, 771, TLS, TLS, TLS, 1.0, 1.1, 1.2 nginx/1.4.6 (Ubuntu) FALSE
#> details.nonPrefixDelegation details.vulnBeast details.renegSupport details.stsStatus details.stsResponseHeader
#> 1 TRUE TRUE 2 unknown
#> details.stsSubdomains details.stsPreload details.sessionResumption details.compressionMethods details.supportsNpn
#> 1 FALSE FALSE 2 0 TRUE
#> details.npnProtocols details.sessionTickets details.sniRequired details.httpStatusCode details.rc4WithModern
#> 1 http/1.1 1 FALSE 200 FALSE
#> details.openSslCcs details.poodle details.poodleTls details.fallbackScsv details.freak details.hasSct
#> 1 0 FALSE 0 TRUE FALSE 0
#> details.dhPrimes
#> 1 e749e3dd00e8c27cdb4400c4d44126c15aea205431cda2fdc7ee9ec69c3fa40616f7c92096355e9400b98c028deac435d4e3f84a234462a6dc8277bf9c8d5b9ebc01f03b60c609a7494a18eac43fc4b05dac2919f934f9b4f8df3f1e9657a47b7e84f843675ddcf68f7edcc09b9340e4aca3b21480e0fb4e6fdc58ebf34d08592ab60c6b7330e976ad9f71a2621605445177862e4a4893c293ec49c3fc7ede6bb5debf7ebfb69ef394ac9e7577c049017f5a4355bc9805f57e38b778bea28838bbdf23eda7682e4ba0db484a3eb9c756d0f5cab110a4bdf9fb6878d312abf7b7d9d3e7826483898d360848e7a4a042fd3076cd9218b0b76caf271e854944df4b
#> details.dhUsesKnownPrimes details.dhYsReuse details.logjam details.key.size details.key.alg details.key.debianFlaw
#> 1 0 FALSE FALSE 2048 RSA FALSE
#> details.key.strength details.cert.subject details.cert.commonNames details.cert.altNames details.cert.notBefore
#> 1 2048 CN=rud.is rud.is rud.is 1.458496e+12
#> details.cert.notAfter details.cert.issuerSubject details.cert.issuerLabel
#> 1 1.466272e+12 CN=Let's Encrypt Authority X1,O=Let's Encrypt,C=US Let's Encrypt Authority X1
#> details.cert.sigAlg details.cert.revocationInfo details.cert.crlURIs details.cert.ocspURIs
#> 1 SHA256withRSA 2 http://ocsp.int-x1.letsencrypt.org/
#> details.cert.revocationStatus details.cert.crlRevocationStatus details.cert.ocspRevocationStatus details.cert.sgc
#> 1 2 4 2 0
#> details.cert.issues details.cert.sct details.cert.sha1Hash
#> 1 0 FALSE 95f6c164dea0e6557269abc23dd2ef0b419cbca5
#> details.cert.pinSha256
#> 1 H9b6scxl5ZpWJeL0BUjJsvL70FK7E+/NRoNXlREQSpw=
#> details.chain.certs
#> 1 CN=rud.is, CN=Let's Encrypt Authority X1,O=Let's Encrypt,C=US, rud.is, Let's Encrypt Authority X1, 1458496140000, 1445294016000, 1466272140000, 1603146816000, CN=Let's Encrypt Authority X1,O=Let's Encrypt,C=US, CN=DST Root CA X3,O=Digital Signature Trust Co., Let's Encrypt Authority X1, DST Root CA X3, SHA256withRSA, SHA256withRSA, 0, 0, RSA, RSA, 2048, 2048, 2048, 2048, 2, 2, 4, 2, 2, 2, 95f6c164dea0e6557269abc23dd2ef0b419cbca5, 3eae91937ec85d74483ff4b77b07b43e2af36bf4, H9b6scxl5ZpWJeL0BUjJsvL70FK7E+/NRoNXlREQSpw=, YLh1dUR9y6Kja30RrAn7JKnbQG/uEtLMkBgFF2Fuihg=, -----BEGIN CERTIFICATE-----\nMIIE8DCCA9igAwIBAgISAdBrukxitHslErEbMj17qOZLMA0GCSqGSIb3DQEBCwUAMEoxCzAJBgNV\r\nBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1\r\ndGhvcml0eSBYMTAeFw0xNjAzMjAxNzQ5MDBaFw0xNjA2MTgxNzQ5MDBaMBExDzANBgNVBAMTBnJ1\r\nZC5pczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM+6xE4IWLSPIaAHqKtmbkkq2rPS\r\nNz/8whgkSPtjX9to6LMoBw6TSA2LKKT86cj3iTd5wnOUdvpSHC9F1UiTLenRqJJp9ZZ+8BRknC6y\r\nHvFqZ3KwD/uuDy+yE432u0pzs4QvhMVV871GknPDbkN5wIwxzmQKT+JLHcVyuTw8Sh+Prv/Ik4hF\r\n4/eLeZn4TxqnLpCrJsyQx2e8lBCP6FKNBOY9SKe76ES85mdwN4bIiQUHGrD/LgVqFhrSmOSpwZgE\r\nR7Zx/pcxFzGxVfvAuotiusjoT1K/kmdPVCISzqcmfum0y5fWeald1e8j9gHKqkWTwKxsZby8+hiE\r\nrH2zw+F/8HcCAwEAAaOCAgcwggIDMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcD\r\nAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUntefpcRjm734PxH1w6glyTA7eGQw\r\nHwYDVR0jBBgwFoAUqEpqYwR93brm0Tm3pkVl7/Oo7KEwcAYIKwYBBQUHAQEEZDBiMC8GCCsGAQUF\r\nBzABhiNodHRwOi8vb2NzcC5pbnQteDEubGV0c2VuY3J5cHQub3JnLzAvBggrBgEFBQcwAoYjaHR0\r\ncDovL2NlcnQuaW50LXgxLmxldHNlbmNyeXB0Lm9yZy8wEQYDVR0RBAowCIIGcnVkLmlzMIH+BgNV\r\nHSAEgfYwgfMwCAYGZ4EMAQIBMIHmBgsrBgEEAYLfEwEBATCB1jAmBggrBgEFBQcCARYaaHR0cDov\r\nL2Nwcy5sZXRzZW5jcnlwdC5vcmcwgasGCCsGAQUFBwICMIGeDIGbVGhpcyBDZXJ0aWZpY2F0ZSBt\r\nYXkgb25seSBiZSByZWxpZWQgdXBvbiBieSBSZWx5aW5nIFBhcnRpZXMgYW5kIG9ubHkgaW4gYWNj\r\nb3JkYW5jZSB3aXRoIHRoZSBDZXJ0aWZpY2F0ZSBQb2xpY3kgZm91bmQgYXQgaHR0cHM6Ly9sZXRz\r\nZW5jcnlwdC5vcmcvcmVwb3NpdG9yeS8wDQYJKoZIhvcNAQELBQADggEBAETgYNrXY2wx2fM472IU\r\nSsKacmeNObZiwHVgmOD1dqOkf7BiXRYh8iSCVJpm2nMLuW2noOj2mm1+kf+KmG0zQyhVRqe2nLzV\r\nTR1cobHihzY97f2itF04jG3dgbjLuZQbsgTsmttovle5PdIy9lj5Ezg9Na33IBFwathFYWsG8mHp\r\naYNUDzZDvXpcuuoGafQu74+w1SxOoDaRKT+vafikQ5cL8Cxm8ItkcqRqTl+1OYCFGD8u2haPASE7\r\nUzvGzhYN8yobn39yvRpl9URzit6VOzaCEccXHFThhTAVpfJgHyPxZ1L4bkWuC7nS1Tci568Icna9\r\nktZNc4PQZMNYjpaehtE=\r\n-----END CERTIFICATE-----\n, -----BEGIN CERTIFICATE-----\nMIIEqDCCA5CgAwIBAgIRAJgT9HUT5XULQ+dDHpceRL0wDQYJKoZIhvcNAQELBQAwPzEkMCIGA1UE\r\nChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzAe\r\nFw0xNTEwMTkyMjMzMzZaFw0yMDEwMTkyMjMzMzZaMEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1M\r\nZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMTCCASIwDQYJ\r\nKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJzTDPBa5S5Ht3JdN4OzaGMw6tc1Jhkl4b2+NfFwki+3\r\nuEtBBaupnjUIWOyxKsRohwuj43Xk5vOnYnG6eYFgH9eRmp/z0HhncchpDpWRz/7mmelgPEjMfspN\r\ndxIknUcbWuu57B43ABycrHunBerOSuu9QeU2mLnL/W08lmjfIypCkAyGdGfIf6WauFJhFBM/ZemC\r\nh8vb+g5W9oaJ84U/l4avsNwa72sNlRZ9xCugZbKZBDZ1gGusSvMbkEl4L6KWTyogJSkExnTA0DHN\r\njzE4lRa6qDO4Q/GxH8Mwf6J5MRM9LTb44/zyM2q5OTHFr8SNDR1kFjOq+oQpttQLwNh9w5MCAwEA\r\nAaOCAZIwggGOMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGGMH8GCCsGAQUFBwEB\r\nBHMwcTAyBggrBgEFBQcwAYYmaHR0cDovL2lzcmcudHJ1c3RpZC5vY3NwLmlkZW50cnVzdC5jb20w\r\nOwYIKwYBBQUHMAKGL2h0dHA6Ly9hcHBzLmlkZW50cnVzdC5jb20vcm9vdHMvZHN0cm9vdGNheDMu\r\ncDdjMB8GA1UdIwQYMBaAFMSnsaR7LHH62+FLkHX/xBVghYkQMFQGA1UdIARNMEswCAYGZ4EMAQIB\r\nMD8GCysGAQQBgt8TAQEBMDAwLgYIKwYBBQUHAgEWImh0dHA6Ly9jcHMucm9vdC14MS5sZXRzZW5j\r\ncnlwdC5vcmcwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5pZGVudHJ1c3QuY29tL0RTVFJP\r\nT1RDQVgzQ1JMLmNybDATBgNVHR4EDDAKoQgwBoIELm1pbDAdBgNVHQ4EFgQUqEpqYwR93brm0Tm3\r\npkVl7/Oo7KEwDQYJKoZIhvcNAQELBQADggEBANHIIkus7+MJiZZQsY14cCoBG1hdv0J20/FyWo5p\r\npnfjL78S2k4s2GLRJ7iD9ZDKErndvbNFGcsW+9kKK/TnY21hp4DdITv8S9ZYQ7oaoqs7HwhEMY9s\r\nibED4aXw09xrJZTC9zK1uIfW6t5dHQjuOWv+HHoWZnupyxpsEUlEaFb+/SCI4KCSBdAsYxAcsHYI\r\n5xxEI4LutHp6s3OT2FuO90WfdsIk6q78OMSdn875bNjdBYAqxUp2/LEIHfDBkLoQz0hFJmwAbYah\r\nqKaLn73PAAm1X2kjf1w8DdnkabOLGeOVcj9LQ+s67vBykx4anTjURkbqZslUEUsn2k5xeua2zUk=\r\n-----END CERTIFICATE-----\n
#> details.chain.issues details.suites.preference details.sims.results details.hstsPolicy.LONG_MAX_AGE
#> 1 0 TRUE NULL 15552000
#> details.hstsPolicy.status details.hpkpPolicy.status details.hpkpPolicy.pins details.hpkpPolicy.matchedPins
#> 1 unknown unknown NULL NULL
#> details.hpkpRoPolicy.status details.hpkpRoPolicy.pins details.hpkpRoPolicy.matchedPins
#> 1 unknown NULL NULL
```
```
### Test Result s
## `ssllabs` Metrics
``` r
| Lang | \# Files | (%) | LoC | (%) | Blank lines | (%) | \# Lines | (%) |
library(ssllabs)
| :--- | -------: | --: | --: | --: | ----------: | ---: | -------: | ---: |
library(testthat)
| R | 9 | 0.9 | 49 | 0.7 | 9 | 0.28 | 131 | 0.79 |
| Rmd | 1 | 0.1 | 21 | 0.3 | 23 | 0.72 | 34 | 0.21 |
date()
#> [1] "Sat Jun 4 23:15:12 2016"
test_dir("tests/")
#> testthat results ========================================================================================================
#> OK: 0 SKIPPED: 0 FAILED: 0
#>
#> DONE ===================================================================================================================
```
### Code of Conduct
## Code of Conduct
Please note that this project is released with a [Contributor Code of Conduct ](CONDUCT.md ). By participating in this project you agree to abide by its terms.
Please note that this project is released with a [Contributor Code of
Conduct](CONDUCT.md). By participating in this project you agree to
abide by its terms.