|
|
@ -1,290 +1,250 @@ |
|
|
|
|
|
|
|
<!-- README.md is generated from README.Rmd. Please edit that file --> |
|
|
|
<!-- |
|
|
|
[](https://travis-ci.org/hrbrmstr/ssllabs) |
|
|
|
](http://www.repostatus.org/#concept) |
|
|
|
[](http://cran.r-project.org/web/packages/ssllabs) |
|
|
|
 |
|
|
|
--> |
|
|
|
`ssllabs` : Tools to Work with the `SSL Labs` `API` |
|
|
|
|
|
|
|
# ssllabs |
|
|
|
|
|
|
|
Interrogate SSL Certificate Configuration Efficacy via ‘ssllabs’ API |
|
|
|
|
|
|
|
## 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. |
|
|
|
|
|
|
|
## What’s Inside the Tin? |
|
|
|
|
|
|
|
The following functions are implemented: |
|
|
|
|
|
|
|
- `analyze_site`: Invoke assessment and check progress |
|
|
|
- `get_endpoint_data`: Retrieve detailed endpoint information |
|
|
|
- `get_root_certs_raw`: Retrieve root certificates |
|
|
|
- `get_status_codes`: Retrieve known status codes |
|
|
|
- `ssllabs`: Tools to Work with the 'SSL Labs' 'API' |
|
|
|
- `ssllabs_api_info`: Check SSL Labs availability |
|
|
|
- `analyze_site`: Invoke assessment and check progress |
|
|
|
- `get_endpoint_data`: Retrieve detailed endpoint information |
|
|
|
- `get_root_certs_raw`: Retrieve root certificates |
|
|
|
- `get_status_codes`: Retrieve known status codes |
|
|
|
- `ssllabs`: Tools to Work with the ‘SSL Labs’ ‘API’ |
|
|
|
- `ssllabs_api_info`: Check SSL Labs availability |
|
|
|
|
|
|
|
### Installation |
|
|
|
## Installation |
|
|
|
|
|
|
|
``` r |
|
|
|
devtools::install_github("hrbrmstr/ssllabs") |
|
|
|
install.packages("ssllabs", repos = "https://cinc.rud.is/") |
|
|
|
``` |
|
|
|
|
|
|
|
### Usage |
|
|
|
## Usage |
|
|
|
|
|
|
|
``` r |
|
|
|
library(ssllabs) |
|
|
|
|
|
|
|
# current verison |
|
|
|
packageVersion("ssllabs") |
|
|
|
#> [1] '0.1.0.9000' |
|
|
|
|
|
|
|
ssllabs_api_info() |
|
|
|
#> $engineVersion |
|
|
|
#> [1] "1.22.37" |
|
|
|
#> |
|
|
|
#> $criteriaVersion |
|
|
|
#> [1] "2009l" |
|
|
|
#> |
|
|
|
#> $clientMaxAssessments |
|
|
|
#> [1] 25 |
|
|
|
#> |
|
|
|
#> $maxAssessments |
|
|
|
#> [1] 25 |
|
|
|
#> |
|
|
|
#> $currentAssessments |
|
|
|
#> [1] 1 |
|
|
|
#> |
|
|
|
#> $newAssessmentCoolOff |
|
|
|
#> [1] 1000 |
|
|
|
#> |
|
|
|
#> $messages |
|
|
|
#> [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" |
|
|
|
|
|
|
|
get_status_codes() |
|
|
|
#> $statusDetails |
|
|
|
#> $statusDetails$TESTING_PROTOCOL_INTOLERANCE_399 |
|
|
|
#> [1] "Testing Protocol Intolerance (TLS 1.99)" |
|
|
|
#> |
|
|
|
#> $statusDetails$PREPARING_REPORT |
|
|
|
#> [1] "Preparing the report" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_SESSION_RESUMPTION |
|
|
|
#> [1] "Testing session resumption" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_NPN |
|
|
|
#> [1] "Testing NPN" |
|
|
|
#> |
|
|
|
#> $statusDetails$RETRIEVING_CERT_V3__NO_SNI |
|
|
|
#> [1] "Retrieving certificate" |
|
|
|
#> |
|
|
|
#> $statusDetails$RETRIEVING_CERT_V3__SNI_APEX |
|
|
|
#> [1] "Retrieving certificate" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_CVE_2014_0224 |
|
|
|
#> [1] "Testing CVE-2014-0224" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_CAPABILITIES |
|
|
|
#> [1] "Determining server capabilities" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_HEARTBLEED |
|
|
|
#> [1] "Testing Heartbleed" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_PROTO_3_3_V2H |
|
|
|
#> [1] "Testing TLS 1.1 (v2 handshake)" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_SESSION_TICKETS |
|
|
|
#> [1] "Testing Session Ticket support" |
|
|
|
#> |
|
|
|
#> $statusDetails$VALIDATING_TRUST_PATHS |
|
|
|
#> [1] "Validating trust paths" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_RENEGOTIATION |
|
|
|
#> [1] "Testing renegotiation" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_HTTPS |
|
|
|
#> [1] "Sending one complete HTTPS request" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_V2H_HANDSHAKE |
|
|
|
#> [1] "Testing v2 handshake" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_STRICT_RI |
|
|
|
#> [1] "Testing Strict Renegotiation" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_SUITES_DEPRECATED |
|
|
|
#> [1] "Testing deprecated cipher suites" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_HANDSHAKE_SIMULATION |
|
|
|
#> [1] "Simulating handshakes" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_STRICT_SNI |
|
|
|
#> [1] "Testing Strict SNI" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_PROTO_3_1_V2H |
|
|
|
#> [1] "Testing TLS 1.0 (v2 handshake)" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_PROTOCOL_INTOLERANCE_499 |
|
|
|
#> [1] "Testing Protocol Intolerance (TLS 2.99)" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_TLS_VERSION_INTOLERANCE |
|
|
|
#> [1] "Testing TLS version intolerance" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_PROTOCOL_INTOLERANCE_304 |
|
|
|
#> [1] "Testing Protocol Intolerance (TLS 1.3)" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_SUITES_BULK |
|
|
|
#> [1] "Bulk-testing less common cipher suites" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_BEAST |
|
|
|
#> [1] "Testing for BEAST" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_PROTO_2_0 |
|
|
|
#> [1] "Testing SSL 2.0" |
|
|
|
#> |
|
|
|
#> $statusDetails$BUILDING_TRUST_PATHS |
|
|
|
#> [1] "Building trust paths" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_PROTO_3_1 |
|
|
|
#> [1] "Testing TLS 1.0" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_PROTO_3_0_V2H |
|
|
|
#> [1] "Testing SSL 3.0 (v2 handshake)" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_PROTO_3_0 |
|
|
|
#> [1] "Testing SSL 3.0" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_PROTOCOL_INTOLERANCE_300 |
|
|
|
#> [1] "Testing Protocol Intolerance (SSL 3.0)" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_PROTOCOL_INTOLERANCE_301 |
|
|
|
#> [1] "Testing Protocol Intolerance (TLS 1.0)" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_PROTOCOL_INTOLERANCE_302 |
|
|
|
#> [1] "Testing Protocol Intolerance (TLS 1.1)" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_PROTOCOL_INTOLERANCE_303 |
|
|
|
#> [1] "Testing Protocol Intolerance (TLS 1.2)" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_OCSP_STAPLING_PRIME |
|
|
|
#> [1] "Trying to prime OCSP stapling" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_EXTENSION_INTOLERANCE |
|
|
|
#> [1] "Testing Extension Intolerance (might take a while)" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_SSL2_SUITES |
|
|
|
#> [1] "Checking if SSL 2.0 has any ciphers enabled" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_OCSP_STAPLING |
|
|
|
#> [1] "Testing OCSP stapling" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_SUITES |
|
|
|
#> [1] "Determining available cipher suites" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_PROTO_3_2_V2H |
|
|
|
#> [1] "Testing TLS 1.1 (v2 handshake)" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_POODLE_TLS |
|
|
|
#> [1] "Testing POODLE against TLS" |
|
|
|
#> |
|
|
|
#> $statusDetails$RETRIEVING_CERT_V3__SNI_WWW |
|
|
|
#> [1] "Retrieving certificate" |
|
|
|
#> |
|
|
|
#> $statusDetails$CHECKING_REVOCATION |
|
|
|
#> [1] "Checking for revoked certificates" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_COMPRESSION |
|
|
|
#> [1] "Testing compression" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_SUITE_PREFERENCE |
|
|
|
#> [1] "Determining cipher suite preference" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_PROTO_3_2 |
|
|
|
#> [1] "Testing TLS 1.1" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_PROTO_3_3 |
|
|
|
#> [1] "Testing TLS 1.2" |
|
|
|
#> |
|
|
|
#> $statusDetails$TESTING_LONG_HANDSHAKE |
|
|
|
#> [1] "Testing Long Handshake (might take a while)" |
|
|
|
|
|
|
|
get_root_certs_raw() |
|
|
|
#> [x509 certificate] AAA Certificate Services |
|
|
|
#> md5: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0 |
|
|
|
#> sha1: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49 |
|
|
|
|
|
|
|
analyze_site("rud.is") |
|
|
|
#> $host |
|
|
|
#> [1] "rud.is" |
|
|
|
#> |
|
|
|
#> $port |
|
|
|
#> [1] 443 |
|
|
|
#> |
|
|
|
#> $protocol |
|
|
|
#> [1] "HTTP" |
|
|
|
#> |
|
|
|
#> $isPublic |
|
|
|
#> [1] FALSE |
|
|
|
#> |
|
|
|
#> $status |
|
|
|
#> [1] "IN_PROGRESS" |
|
|
|
#> |
|
|
|
#> $startTime |
|
|
|
#> [1] 1.465096e+12 |
|
|
|
#> |
|
|
|
#> $engineVersion |
|
|
|
#> [1] "1.22.37" |
|
|
|
#> |
|
|
|
#> $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 |
|
|
|
## [1] '0.1.0.9000' |
|
|
|
|
|
|
|
ssllabs_api_info() %>% |
|
|
|
str(1) |
|
|
|
## List of 7 |
|
|
|
## $ engineVersion : chr "1.32.16" |
|
|
|
## $ criteriaVersion : chr "2009p" |
|
|
|
## $ clientMaxAssessments: int 24 |
|
|
|
## $ maxAssessments : int 24 |
|
|
|
## $ currentAssessments : int 0 |
|
|
|
## $ 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__ |
|
|
|
|
|
|
|
get_status_codes() %>% |
|
|
|
str(2) |
|
|
|
## List of 1 |
|
|
|
## $ statusDetails:List of 58 |
|
|
|
## ..$ TESTING_STRICT_RI : chr "Testing Strict Renegotiation" |
|
|
|
## ..$ TESTING_PROTOCOL_INTOLERANCE_304: chr "Testing Protocol Intolerance (TLS 1.3)" |
|
|
|
## ..$ TESTING_HANDSHAKE_SIMULATION : chr "Simulating handshakes" |
|
|
|
## ..$ TESTING_CVE_2014_0224 : chr "Testing CVE-2014-0224" |
|
|
|
## ..$ TESTING_PROTO_3_2_V2H : chr "Testing TLS 1.1 (v2 handshake)" |
|
|
|
## ..$ TESTING_HEARTBLEED : chr "Testing Heartbleed" |
|
|
|
## ..$ TESTING_RENEGOTIATION : chr "Testing renegotiation" |
|
|
|
## ..$ TESTING_PROTOCOL_INTOLERANCE_300: chr "Testing Protocol Intolerance (SSL 3.0)" |
|
|
|
## ..$ TESTING_ECDHE_PARAMETER_REUSE : chr "Testing ECDHE parameter reuse" |
|
|
|
## ..$ TESTING_SUITES_BULK : chr "Bulk-testing less common cipher suites" |
|
|
|
## ..$ TESTING_PROTO_3_1_V2H : chr "Testing TLS 1.0 (v2 handshake)" |
|
|
|
## ..$ TESTING_PROTOCOL_INTOLERANCE_301: chr "Testing Protocol Intolerance (TLS 1.0)" |
|
|
|
## ..$ TESTING_PROTOCOL_INTOLERANCE_302: chr "Testing Protocol Intolerance (TLS 1.1)" |
|
|
|
## ..$ BUILDING_TRUST_PATHS : chr "Building trust paths" |
|
|
|
## ..$ TESTING_PROTOCOL_INTOLERANCE_303: chr "Testing Protocol Intolerance (TLS 1.2)" |
|
|
|
## ..$ TESTING_PROTO_3_0 : chr "Testing SSL 3.0" |
|
|
|
## ..$ TESTING_DROWN : chr "Testing for DROWN" |
|
|
|
## ..$ TESTING_PROTO_3_1 : chr "Testing TLS 1.0" |
|
|
|
## ..$ TESTING_PROTO_3_3_V2H : chr "Testing TLS 1.1 (v2 handshake)" |
|
|
|
## ..$ TESTING_SUITE_PREFERENCE : chr "Determining cipher suite preference" |
|
|
|
## ..$ TESTING_TLS_VERSION_INTOLERANCE : chr "Testing TLS version intolerance" |
|
|
|
## ..$ VALIDATING_TRUST_PATHS : chr "Validating trust paths" |
|
|
|
## ..$ TESTING_LONG_HANDSHAKE : chr "Testing Long Handshake (might take a while)" |
|
|
|
## ..$ TESTING_SUITES_DEPRECATED : chr "Testing deprecated cipher suites" |
|
|
|
## ..$ TESTING_TICKETBLEED : chr "Testing Ticketbleed" |
|
|
|
## ..$ RETRIEVING_CERT_V3__SNI_APEX : chr "Retrieving certificate" |
|
|
|
## ..$ TESTING_SESSION_TICKETS : chr "Testing Session Ticket support" |
|
|
|
## ..$ TESTING_PROTO_3_4 : chr "Testing TLS 1.3" |
|
|
|
## ..$ TESTING_PROTOCOL_INTOLERANCE_499: chr "Testing Protocol Intolerance (TLS 2.152)" |
|
|
|
## ..$ TESTING_PROTO_3_2 : chr "Testing TLS 1.1" |
|
|
|
## ..$ TESTING_PROTO_3_3 : chr "Testing TLS 1.2" |
|
|
|
## ..$ RETRIEVING_CERT_V3__SNI_WWW : chr "Retrieving certificate" |
|
|
|
## ..$ TESTING_SUITES_NO_SNI : chr "Observed extra suites during simulation, Testing cipher suites without SNI support" |
|
|
|
## ..$ TESTING_CAPABILITIES : chr "Determining server capabilities" |
|
|
|
## ..$ TESTING_EXTENSION_INTOLERANCE : chr "Testing Extension Intolerance (might take a while)" |
|
|
|
## ..$ TESTING_EC_NAMED_CURVES : chr "Determining supported named groups" |
|
|
|
## ..$ TESTING_NPN : chr "Testing NPN" |
|
|
|
## ..$ TESTING_POODLE_TLS : chr "Testing POODLE against TLS" |
|
|
|
## ..$ CHECKING_REVOCATION : chr "Checking for revoked certificates" |
|
|
|
## ..$ TESTING_BEAST : chr "Testing for BEAST" |
|
|
|
## ..$ TESTING_COMPRESSION : chr "Testing compression" |
|
|
|
## ..$ RETRIEVING_CERT_V3__NO_SNI : chr "Retrieving certificate" |
|
|
|
## ..$ RETRIEVING_CERT_TLS13 : chr "Retrieving certificate" |
|
|
|
## ..$ TESTING_PROTO_2_0 : chr "Testing SSL 2.0" |
|
|
|
## ..$ TESTING_ALPN : chr "Determining supported ALPN protocols" |
|
|
|
## ..$ TESTING_OCSP_STAPLING_PRIME : chr "Trying to prime OCSP stapling" |
|
|
|
## ..$ TESTING_SESSION_RESUMPTION : chr "Testing session resumption" |
|
|
|
## ..$ TESTING_OCSP_STAPLING : chr "Testing OCSP stapling" |
|
|
|
## ..$ TESTING_PROTOCOL_INTOLERANCE_399: chr "Testing Protocol Intolerance (TLS 1.152)" |
|
|
|
## ..$ TESTING_STRICT_SNI : chr "Testing Strict SNI" |
|
|
|
## ..$ TESTING_HTTPS : chr "Sending one complete HTTPS request" |
|
|
|
## ..$ PREPARING_REPORT : chr "Preparing the report" |
|
|
|
## ..$ TESTING_SSL2_SUITES : chr "Checking if SSL 2.0 has any ciphers enabled" |
|
|
|
## ..$ TESTING_SUITES : chr "Determining available cipher suites" |
|
|
|
## ..$ TESTING_CVE_2016_2107 : chr "Testing CVE-2016-2107" |
|
|
|
## ..$ TESTING_PROTO_3_0_V2H : chr "Testing SSL 3.0 (v2 handshake)" |
|
|
|
## ..$ TESTING_V2H_HANDSHAKE : chr "Testing v2 handshake" |
|
|
|
## ..$ TESTING_BLEICHENBACHER : chr "Testing Bleichenbacher" |
|
|
|
|
|
|
|
get_root_certs_raw() %>% |
|
|
|
str(1) |
|
|
|
## List of 8 |
|
|
|
## $ subject : chr "CN=AAA Certificate Services,O=Comodo CA Limited,L=Salford,ST=Greater Manchester,C=GB" |
|
|
|
## $ issuer : chr "CN=AAA Certificate Services,O=Comodo CA Limited,L=Salford,ST=Greater Manchester,C=GB" |
|
|
|
## $ algorithm : chr "sha1WithRSAEncryption" |
|
|
|
## $ signature : raw [1:256] 08 56 fc 02 ... |
|
|
|
## $ validity : chr [1:2] "Jan 1 00:00:00 2004 GMT" "Dec 31 23:59:59 2028 GMT" |
|
|
|
## $ self_signed: logi TRUE |
|
|
|
## $ alt_names : NULL |
|
|
|
## $ pubkey :List of 5 |
|
|
|
|
|
|
|
analyze_site("rud.is") %>% |
|
|
|
str(2) |
|
|
|
## List of 10 |
|
|
|
## $ host : chr "rud.is" |
|
|
|
## $ port : int 443 |
|
|
|
## $ protocol : chr "HTTP" |
|
|
|
## $ isPublic : logi FALSE |
|
|
|
## $ status : chr "READY" |
|
|
|
## $ startTime : num 1.55e+12 |
|
|
|
## $ testTime : num 1.55e+12 |
|
|
|
## $ engineVersion : chr "1.32.16" |
|
|
|
## $ criteriaVersion: chr "2009p" |
|
|
|
## $ endpoints :'data.frame': 2 obs. of 96 variables: |
|
|
|
## ..$ ipAddress : chr [1:2] "2602:ff16:3:0:0:0:4dfb:9ac5" "172.93.49.183" |
|
|
|
## ..$ statusMessage : chr [1:2] "Ready" "Ready" |
|
|
|
## ..$ grade : chr [1:2] "A+" "A+" |
|
|
|
## ..$ gradeTrustIgnored : chr [1:2] "A+" "A+" |
|
|
|
## ..$ hasWarnings : logi [1:2] FALSE FALSE |
|
|
|
## ..$ isExceptional : logi [1:2] TRUE TRUE |
|
|
|
## ..$ progress : int [1:2] 100 100 |
|
|
|
## ..$ duration : int [1:2] 41233 40519 |
|
|
|
## ..$ eta : int [1:2] 6 3 |
|
|
|
## ..$ delegation : int [1:2] 1 1 |
|
|
|
## ..$ details.hostStartTime : num [1:2] 1.55e+12 1.55e+12 |
|
|
|
## ..$ details.protocols :List of 2 |
|
|
|
## ..$ details.serverSignature : chr [1:2] "nginx/1.15.9" "nginx/1.15.9" |
|
|
|
## ..$ details.prefixDelegation : logi [1:2] FALSE FALSE |
|
|
|
## ..$ details.nonPrefixDelegation : logi [1:2] TRUE TRUE |
|
|
|
## ..$ details.vulnBeast : logi [1:2] FALSE FALSE |
|
|
|
## ..$ details.stsStatus : chr [1:2] "present" "present" |
|
|
|
## ..$ details.stsResponseHeader : chr [1:2] "max-age=31536000; includeSubDomains; preload" "max-age=31536000; includeSubDomains; preload" |
|
|
|
## ..$ details.stsMaxAge : int [1:2] 31536000 31536000 |
|
|
|
## ..$ details.stsSubdomains : logi [1:2] TRUE TRUE |
|
|
|
## ..$ details.stsPreload : logi [1:2] TRUE TRUE |
|
|
|
## ..$ details.sessionResumption : int [1:2] 2 2 |
|
|
|
## ..$ details.compressionMethods : int [1:2] 0 0 |
|
|
|
## ..$ details.supportsNpn : logi [1:2] TRUE TRUE |
|
|
|
## ..$ details.npnProtocols : chr [1:2] "h2 http/1.1" "h2 http/1.1" |
|
|
|
## ..$ details.supportsAlpn : logi [1:2] TRUE TRUE |
|
|
|
## ..$ details.sessionTickets : int [1:2] 0 0 |
|
|
|
## ..$ details.ocspStapling : logi [1:2] TRUE TRUE |
|
|
|
## ..$ details.staplingRevocationStatus : int [1:2] 2 2 |
|
|
|
## ..$ details.sniRequired : logi [1:2] TRUE TRUE |
|
|
|
## ..$ details.httpStatusCode : int [1:2] 200 200 |
|
|
|
## ..$ details.supportsRc4 : logi [1:2] FALSE FALSE |
|
|
|
## ..$ details.rc4WithModern : logi [1:2] FALSE FALSE |
|
|
|
## ..$ details.rc4Only : logi [1:2] FALSE FALSE |
|
|
|
## ..$ details.forwardSecrecy : int [1:2] 4 4 |
|
|
|
## ..$ details.protocolIntolerance : int [1:2] 0 0 |
|
|
|
## ..$ details.miscIntolerance : int [1:2] 0 0 |
|
|
|
## ..$ details.heartbleed : logi [1:2] FALSE FALSE |
|
|
|
## ..$ details.heartbeat : logi [1:2] TRUE TRUE |
|
|
|
## ..$ details.openSslCcs : int [1:2] 1 1 |
|
|
|
## ..$ details.openSSLLuckyMinus20 : int [1:2] 1 1 |
|
|
|
## ..$ details.poodle : logi [1:2] FALSE FALSE |
|
|
|
## ..$ details.poodleTls : int [1:2] 1 1 |
|
|
|
## ..$ details.freak : logi [1:2] FALSE FALSE |
|
|
|
## ..$ details.hasSct : int [1:2] 1 1 |
|
|
|
## ..$ details.logjam : logi [1:2] FALSE FALSE |
|
|
|
## ..$ details.hstsPreloads :List of 2 |
|
|
|
## ..$ details.drownHosts :List of 2 |
|
|
|
## ..$ details.drownErrors : logi [1:2] FALSE FALSE |
|
|
|
## ..$ details.drownVulnerable : logi [1:2] FALSE FALSE |
|
|
|
## ..$ details.key.size : int [1:2] 2048 2048 |
|
|
|
## ..$ details.key.alg : chr [1:2] "RSA" "RSA" |
|
|
|
## ..$ details.key.debianFlaw : logi [1:2] FALSE FALSE |
|
|
|
## ..$ details.key.strength : int [1:2] 2048 2048 |
|
|
|
## ..$ details.cert.subject : chr [1:2] "CN=rud.is" "CN=rud.is" |
|
|
|
## ..$ details.cert.commonNames :List of 2 |
|
|
|
## ..$ details.cert.altNames :List of 2 |
|
|
|
## ..$ details.cert.notBefore : num [1:2] 1.55e+12 1.55e+12 |
|
|
|
## ..$ 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" |
|
|
|
## ..$ details.cert.issuerLabel : chr [1:2] "Let's Encrypt Authority X3" "Let's Encrypt Authority X3" |
|
|
|
## ..$ details.cert.sigAlg : chr [1:2] "SHA256withRSA" "SHA256withRSA" |
|
|
|
## ..$ details.cert.revocationInfo : int [1:2] 2 2 |
|
|
|
## ..$ details.cert.crlURIs :List of 2 |
|
|
|
## ..$ details.cert.ocspURIs :List of 2 |
|
|
|
## ..$ details.cert.revocationStatus : int [1:2] 2 2 |
|
|
|
## ..$ details.cert.crlRevocationStatus : int [1:2] 4 4 |
|
|
|
## ..$ details.cert.ocspRevocationStatus : int [1:2] 2 2 |
|
|
|
## ..$ details.cert.sgc : int [1:2] 0 0 |
|
|
|
## ..$ details.cert.issues : int [1:2] 0 0 |
|
|
|
## ..$ details.cert.sct : logi [1:2] TRUE TRUE |
|
|
|
## ..$ details.cert.mustStaple : int [1:2] 0 0 |
|
|
|
## ..$ details.cert.sha1Hash : chr [1:2] "11ddb41c60593c77c93c32da72dd6d10f3c017f7" "11ddb41c60593c77c93c32da72dd6d10f3c017f7" |
|
|
|
## ..$ details.cert.pinSha256 : chr [1:2] "zx1eDaN0/w/ZvtwQW5wPWUunFkSGQ6Fp8uOOh4Qn85A=" "zx1eDaN0/w/ZvtwQW5wPWUunFkSGQ6Fp8uOOh4Qn85A=" |
|
|
|
## ..$ details.chain.certs :List of 2 |
|
|
|
## ..$ details.chain.issues : int [1:2] 0 0 |
|
|
|
## ..$ details.suites.list :List of 2 |
|
|
|
## ..$ details.suites.preference : logi [1:2] TRUE TRUE |
|
|
|
## ..$ details.sims.results :List of 2 |
|
|
|
## ..$ 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" |
|
|
|
## ..$ details.hstsPolicy.status : chr [1:2] "present" "present" |
|
|
|
## ..$ details.hstsPolicy.maxAge : int [1:2] 31536000 31536000 |
|
|
|
## ..$ details.hstsPolicy.includeSubDomains : logi [1:2] TRUE TRUE |
|
|
|
## ..$ details.hstsPolicy.preload : logi [1:2] TRUE TRUE |
|
|
|
## ..$ details.hstsPolicy.directives.includesubdomains: chr [1:2] "" "" |
|
|
|
## ..$ details.hstsPolicy.directives.max-age : chr [1:2] "31536000" "31536000" |
|
|
|
## ..$ details.hstsPolicy.directives.preload : chr [1:2] "" "" |
|
|
|
## ..$ details.hpkpPolicy.status : chr [1:2] "absent" "absent" |
|
|
|
## ..$ details.hpkpPolicy.pins :List of 2 |
|
|
|
## ..$ details.hpkpPolicy.matchedPins :List of 2 |
|
|
|
## ..$ details.hpkpPolicy.directives :List of 2 |
|
|
|
## ..$ details.hpkpRoPolicy.status : chr [1:2] "absent" "absent" |
|
|
|
## ..$ details.hpkpRoPolicy.pins :List of 2 |
|
|
|
## ..$ details.hpkpRoPolicy.matchedPins :List of 2 |
|
|
|
## ..$ details.hpkpRoPolicy.directives :List of 2 |
|
|
|
``` |
|
|
|
|
|
|
|
### Test Results |
|
|
|
## `ssllabs` Metrics |
|
|
|
|
|
|
|
``` r |
|
|
|
library(ssllabs) |
|
|
|
library(testthat) |
|
|
|
|
|
|
|
date() |
|
|
|
#> [1] "Sat Jun 4 23:15:12 2016" |
|
|
|
|
|
|
|
test_dir("tests/") |
|
|
|
#> testthat results ======================================================================================================== |
|
|
|
#> OK: 0 SKIPPED: 0 FAILED: 0 |
|
|
|
#> |
|
|
|
#> DONE =================================================================================================================== |
|
|
|
``` |
|
|
|
| Lang | \# Files | (%) | LoC | (%) | Blank lines | (%) | \# Lines | (%) | |
|
|
|
| :--- | -------: | --: | --: | --: | ----------: | ---: | -------: | ---: | |
|
|
|
| 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 | |
|
|
|
|
|
|
|
### 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. |
|
|
|