Web Compatibility and TLS

During a dev-servo discussion about the merits of various TLS libraries, the question of web compatibility came up–what cryptographic protocols does Servo need to support in order to serve most of the web?

I decided to run cipherscan and get some updated results.

Results

You can see the full results here, but I’ll highlight what I consider the most interesting in this case.

Ciphers

Supported Ciphers Count Percent
3DES 472578 87.0229
3DES Only 491 0.0904
3DES Preferred 1450 0.267
3DES forced in TLS1.1+ 854 0.1573
AES 539545 99.3546
AES Only 49098 9.0412
AES-CBC 539101 99.2728
AES-CBC Only 4403 0.8108
AES-GCM 458011 84.3405
AES-GCM Only 405 0.0746
CAMELLIA 245146 45.1424
CHACHA20 68015 12.5246
CHACHA20 Only 1 0.0002
Insecure 42351 7.7987
RC4 131983 24.304
RC4 Only 111 0.0204
RC4 Preferred 11067 2.0379
RC4 forced in TLS1.1+ 6031 1.1106

Protocols

Supported Protocols Count Percent
SSL2 12822 2.3611
SSL2 Only 10 0.0018
SSL3 76905 14.1617
SSL3 Only 272 0.0501
SSL3 or TLS1 Only 46262 8.5189
SSL3 or lower Only 278 0.0512
TLS1 530593 97.7061
TLS1 Only 26478 4.8758
TLS1 or lower Only 58211 10.7193
TLS1.1 476556 87.7555
TLS1.1 Only 40 0.0074
TLS1.1 or up Only 12044 2.2178
TLS1.2 483237 88.9857
TLS1.2 Only 3365 0.6196
TLS1.2, 1.0 but not 1.1 4564 0.8404
Supported Handshakes Count Percent
ADH 781 0.1438
AECDH 8790 1.6186
DHE 302890 55.7757
ECDHE 476401 87.7269
ECDHE and DHE 263183 48.4639
RSA 472454 87.0001

Certificates

Certificate sig alg Count Percent
None 9328 1.7177
ecdsa-with-SHA256 47343 8.718
sha1WithRSAEncryption 14180 2.6112
sha256WithRSAEncryption 495204 91.1894
sha384WithRSAEncryption 7 0.0013
sha512WithRSAEncryption 62 0.0114
OCSP stapling Count Percent
Supported 132214 24.3466
Unsupported 410836 75.6534

Discussion

I initially compiled these stats because the Servo community brought up the possibility of using rustls (hyper crate) in Servo. Currently, rustls only supports TLS1.2, so it seemed like a good time to get some updated cipherscan results. Over 10% of the sites surveyed only supported TLS1.1 or lower. In a production browser, this would be way too high.

Mostly, I think these numbers can be useful for prioritization right now.