boB Rudis
5 years ago
26 changed files with 526 additions and 416 deletions
@ -1,17 +1,26 @@ |
|||||
Package: ssllabs |
Package: ssllabs |
||||
Title: Tools to Work with the `SSL Labs` `API` |
Title: Interrogate SSL Certificate Configuration Efficacy via 'ssllabs' API |
||||
Version: 0.1.0.9000 |
Version: 0.2.0 |
||||
Authors@R: c(person("Bob", "Rudis", email = "bob@rudis.net", role = c("aut", "cre"))) |
Authors@R: c( |
||||
Description: Tools to Work with the `SSL Labs` `API`. |
person("Bob", "Rudis", email = "bob@rudis.net", role = c("aut", "cre")) |
||||
|
) |
||||
|
Description: '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. |
||||
Depends: |
Depends: |
||||
R (>= 3.0.0) |
R (>= 3.2.0) |
||||
License: AGPL + file LICENSE |
License: MIT + file LICENSE |
||||
Encoding: UTF-8 |
Encoding: UTF-8 |
||||
LazyData: true |
LazyData: true |
||||
|
URL: https://gitlab.com/hrbrmstr/ssllabs |
||||
|
BugReports: https://gitlab.com/hrbrmstr/ssllabs/issues |
||||
Suggests: |
Suggests: |
||||
testthat |
testthat |
||||
Imports: |
Imports: |
||||
httr, |
httr, |
||||
jsonlite, |
jsonlite, |
||||
openssl |
openssl, |
||||
RoxygenNote: 5.0.1 |
magrittr |
||||
|
RoxygenNote: 6.1.1 |
||||
|
@ -1,2 +1,2 @@ |
|||||
YEAR: 2016 |
YEAR: 2019 |
||||
COPYRIGHT HOLDER: Bob Rudis |
COPYRIGHT HOLDER: Bob Rudis |
||||
|
@ -0,0 +1,21 @@ |
|||||
|
# MIT License |
||||
|
|
||||
|
Copyright (c) 2019 Bob Rudis |
||||
|
|
||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
|
of this software and associated documentation files (the "Software"), to deal |
||||
|
in the Software without restriction, including without limitation the rights |
||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
|
copies of the Software, and to permit persons to whom the Software is |
||||
|
furnished to do so, subject to the following conditions: |
||||
|
|
||||
|
The above copyright notice and this permission notice shall be included in all |
||||
|
copies or substantial portions of the Software. |
||||
|
|
||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
||||
|
SOFTWARE. |
@ -1,13 +1,14 @@ |
|||||
# Generated by roxygen2: do not edit by hand |
# Generated by roxygen2: do not edit by hand |
||||
|
|
||||
|
export("%>%") |
||||
export(analyze_site) |
export(analyze_site) |
||||
export(get_endpoint_data) |
export(get_endpoint_data) |
||||
export(get_root_certs_raw) |
export(get_root_certs) |
||||
export(get_status_codes) |
|
||||
export(ssllabs_api_info) |
export(ssllabs_api_info) |
||||
importFrom(httr,GET) |
importFrom(httr,GET) |
||||
importFrom(httr,content) |
importFrom(httr,content) |
||||
importFrom(httr,stop_for_status) |
importFrom(httr,stop_for_status) |
||||
importFrom(httr,user_agent) |
importFrom(httr,user_agent) |
||||
importFrom(jsonlite,fromJSON) |
importFrom(jsonlite,fromJSON) |
||||
|
importFrom(magrittr,"%>%") |
||||
importFrom(openssl,read_cert) |
importFrom(openssl,read_cert) |
||||
|
@ -0,0 +1,6 @@ |
|||||
|
# ssllabs 0.2.0 |
||||
|
|
||||
|
* Added a `NEWS.md` file to track changes to the package. |
||||
|
* Updated pkg to cover v3 API |
||||
|
* Added tests |
||||
|
* Updated README |
@ -0,0 +1,7 @@ |
|||||
|
httr::user_agent( |
||||
|
sprintf( |
||||
|
"ssllabs package v%s: (<%s>)", |
||||
|
utils::packageVersion("ssllabs"), |
||||
|
utils::packageDescription("ssllabs")$URL |
||||
|
) |
||||
|
) -> .SSLLABS_UA |
@ -1,13 +1,42 @@ |
|||||
#' Retrieve root certificates |
#' Retrieve root certificates |
||||
#' |
#' |
||||
#' This call returns the root certificates used for trust validation. |
#' This call returns the latest root certificates(Mozilla, Apple MacOS, Android, |
||||
|
#' Java and Windows) used for trust validation |
||||
#' |
#' |
||||
#' @references \url{https://github.com/ssllabs/ssllabs-scan/blob/stable/ssllabs-api-docs.md} |
#' @md |
||||
|
#' @param trust_store one of "`moz`" (Mozilla), "`apple`", "`android`", "`java`", "`ms`" (Windows) |
||||
|
#' @return `list` of `openssl`-parsed certificates |
||||
|
#' @references <https://github.com/ssllabs/ssllabs-scan/blob/stable/ssllabs-api-docs-v3.md> |
||||
#' @export |
#' @export |
||||
get_root_certs_raw <- function() { |
#' @examples |
||||
|
#' get_root_certs() |
||||
|
get_root_certs <- function(trust_store = c("moz", "apple", "android", "java", "ms")) { |
||||
|
|
||||
|
trust_store <- match.arg(trust_store[1], c("moz", "apple", "android", "java", "ms")) |
||||
|
|
||||
|
switch( |
||||
|
trust_store, |
||||
|
moz = 1L, |
||||
|
apple = 2L, |
||||
|
android = 3L, |
||||
|
java = 4L, |
||||
|
ms = 5L |
||||
|
) -> trust_store |
||||
|
|
||||
|
httr::GET( |
||||
|
url = "https://api.ssllabs.com/api/v3/getRootCertsRaw", |
||||
|
query = list( |
||||
|
trustStore = trust_store |
||||
|
), |
||||
|
.SSLLABS_UA |
||||
|
) -> res |
||||
|
|
||||
res <- httr::GET("https://api.ssllabs.com/api/v2/getRootCertsRaw") |
|
||||
httr::stop_for_status(res) |
httr::stop_for_status(res) |
||||
dat <- httr::content(res, as = "text") |
|
||||
return(openssl::read_cert(dat)) |
out <- httr::content(res, as = "text") |
||||
|
|
||||
|
out <- openssl::read_cert_bundle(out) |
||||
|
|
||||
|
out |
||||
|
|
||||
} |
} |
||||
|
@ -1,13 +0,0 @@ |
|||||
#' Retrieve known status codes |
|
||||
#' |
|
||||
#' This call will return one StatusCodes instance. |
|
||||
#' |
|
||||
#' @references \url{https://github.com/ssllabs/ssllabs-scan/blob/stable/ssllabs-api-docs.md} |
|
||||
#' @export |
|
||||
get_status_codes <- function() { |
|
||||
|
|
||||
res <- httr::GET("https://api.ssllabs.com/api/v2/getStatusCodes") |
|
||||
dat <- httr::content(res, as="text") |
|
||||
jsonlite::fromJSON(dat, flatten=TRUE) |
|
||||
|
|
||||
} |
|
@ -0,0 +1,11 @@ |
|||||
|
#' Pipe operator |
||||
|
#' |
||||
|
#' See \code{magrittr::\link[magrittr]{\%>\%}} for details. |
||||
|
#' |
||||
|
#' @name %>% |
||||
|
#' @rdname pipe |
||||
|
#' @keywords internal |
||||
|
#' @export |
||||
|
#' @importFrom magrittr %>% |
||||
|
#' @usage lhs \%>\% rhs |
||||
|
NULL |
@ -1,290 +1,250 @@ |
|||||
|
|
||||
<!-- 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: |
||||
|
|
||||
- `analyze_site`: Invoke assessment and check progress |
- `analyze_site`: Invoke assessment and check progress |
||||
- `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 Results |
## `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. |
||||
|
@ -0,0 +1,24 @@ |
|||||
|
% Generated by roxygen2: do not edit by hand |
||||
|
% Please edit documentation in R/root.r |
||||
|
\name{get_root_certs} |
||||
|
\alias{get_root_certs} |
||||
|
\title{Retrieve root certificates} |
||||
|
\usage{ |
||||
|
get_root_certs(trust_store = c("moz", "apple", "android", "java", "ms")) |
||||
|
} |
||||
|
\arguments{ |
||||
|
\item{trust_store}{one of "\code{moz}" (Mozilla), "\code{apple}", "\code{android}", "\code{java}", "\code{ms}" (Windows)} |
||||
|
} |
||||
|
\value{ |
||||
|
\code{list} of \code{openssl}-parsed certificates |
||||
|
} |
||||
|
\description{ |
||||
|
This call returns the latest root certificates(Mozilla, Apple MacOS, Android, |
||||
|
Java and Windows) used for trust validation |
||||
|
} |
||||
|
\examples{ |
||||
|
get_root_certs() |
||||
|
} |
||||
|
\references{ |
||||
|
\url{https://github.com/ssllabs/ssllabs-scan/blob/stable/ssllabs-api-docs-v3.md} |
||||
|
} |
@ -1,15 +0,0 @@ |
|||||
% Generated by roxygen2: do not edit by hand |
|
||||
% Please edit documentation in R/root.r |
|
||||
\name{get_root_certs_raw} |
|
||||
\alias{get_root_certs_raw} |
|
||||
\title{Retrieve root certificates} |
|
||||
\usage{ |
|
||||
get_root_certs_raw() |
|
||||
} |
|
||||
\description{ |
|
||||
This call returns the root certificates used for trust validation. |
|
||||
} |
|
||||
\references{ |
|
||||
\url{https://github.com/ssllabs/ssllabs-scan/blob/stable/ssllabs-api-docs.md} |
|
||||
} |
|
||||
|
|
@ -1,15 +0,0 @@ |
|||||
% Generated by roxygen2: do not edit by hand |
|
||||
% Please edit documentation in R/status.r |
|
||||
\name{get_status_codes} |
|
||||
\alias{get_status_codes} |
|
||||
\title{Retrieve known status codes} |
|
||||
\usage{ |
|
||||
get_status_codes() |
|
||||
} |
|
||||
\description{ |
|
||||
This call will return one StatusCodes instance. |
|
||||
} |
|
||||
\references{ |
|
||||
\url{https://github.com/ssllabs/ssllabs-scan/blob/stable/ssllabs-api-docs.md} |
|
||||
} |
|
||||
|
|
@ -0,0 +1,12 @@ |
|||||
|
% Generated by roxygen2: do not edit by hand |
||||
|
% Please edit documentation in R/utils-pipe.R |
||||
|
\name{\%>\%} |
||||
|
\alias{\%>\%} |
||||
|
\title{Pipe operator} |
||||
|
\usage{ |
||||
|
lhs \%>\% rhs |
||||
|
} |
||||
|
\description{ |
||||
|
See \code{magrittr::\link[magrittr]{\%>\%}} for details. |
||||
|
} |
||||
|
\keyword{internal} |
@ -1,6 +1,15 @@ |
|||||
context("basic functionality") |
context("API coverage") |
||||
test_that("we can do something", { |
|
||||
|
|
||||
#expect_that(some_function(), is_a("data.frame")) |
expect_true("engineVersion" %in% names(ssllabs_api_info())) |
||||
|
|
||||
}) |
x <- get_root_certs() |
||||
|
expect(length(x) > 0) |
||||
|
expect_is(x[[1]], "cert") |
||||
|
|
||||
|
x <- get_endpoint_data("www.ssllabs.com", "64.41.200.100", TRUE) |
||||
|
expect(length(x) > 0) |
||||
|
expect_equal(x$ipAddress, "64.41.200.100") |
||||
|
|
||||
|
x <- analyze_site(host = "www.ssllabs.com", from_cache = TRUE) |
||||
|
expect(length(x) > 0) |
||||
|
expect_true(grepl("A", x$endpoints$grade[1])) |
||||
|
Loading…
Reference in new issue