"S" is for "Secure"
HTTPS
HyperText Transfer Protocol Secure
SSL / TLS
Secure Sockets Layer
Transport Layer Security
+
=
+
=
+
=
+
=
private key
public key
Asymetric
Cryptography
Digital Signature
hash
+
=
Sign
Verify
hash
+
=
signature
== ?
handshake
client
server
+ =
+ =
+ + =
+ =
+ =
+ =
+ =
+ + =
handshake
client
server
+ =
+ =
+ =
+ =
+ =
+ =
attacker
+ + =
+ + =
Certificates
-----BEGIN CERTIFICATE-----
MIIGJjCCBQ6gAwIBAgISA+QXf7/R8dEixU+Nv8gYX46fMA0GCSqGSIb3DQEBCwUA
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xNjExMTQwNTAwMDBaFw0x
NzAyMTIwNTAwMDBaMBcxFTATBgNVBAMTDHVuaXZhZGlzLmNvbTCCAiIwDQYJKoZI
hvcNAQEBBQADggIPADCCAgoCggIBAMHb7ldnrl9RMnjjIC0U4tqrvrpF7bGO72fe
tXb1VmK8EZxWtIp0L4+ribTpY/XVdSLkUFNHH3rr2crsblIbEsqRia8onkC6YzC5
UiVqIM9Lbqi+NjWCp6SfxfluxkzicKgNM1tvWfItR6AeoMp7uBPC+krOvW9FLd1g
1w2HrEZCeXBYjK1/8m4IH37o4vdUYnl6sGoMku8Yq5+uCREpK8m1qWpska0l+wok
fNidRzJlhyGlR+ZF9FKhE5SfC6RCaQ4bHOVcpEMGRLSqr1MBZVne+RdjJ+7/gRal
MEL49YCchdtLgOhBEb2CMAyx1lhqPkJdaLtaXKQ6f/MiWAis69eY3TOyvhd3uKg9
cY9nGggOU8ZTI2O/KpDpJu1HJr6m1myhSBmoDxd5a3Ar1Zm9HAa5q2LvqZowc+3O
fNGgRsIa1k8U3QR4P1M4hJEMjlmsv3wMFSHKtLA8ebTbheZpqxT0HZfLxy8Utri7
adB7PDdV49dvDApn5umRxIK772O/Hbn7+qALJqkOQIcKDW5YPvgUSbZwI9do800P
GcWl0My9mlgHO8I2zmlX48AUQipjF1dX/CRCLUAfQ/5Abv/4AzL26FUzxVLUWUHN
PF4fIRL41G0BQxIU+0Uejq8x94oyykb2kdial8EwniNpE33Go9alCVydd1r6hoGQ
vzrNbhg1AgMBAAGjggI3MIICMzAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYI
KwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFEfXCv6D
hAjWGL2SktsW0wvcDjKoMB8GA1UdIwQYMBaAFKhKamMEfd265tE5t6ZFZe/zqOyh
MHAGCCsGAQUFBwEBBGQwYjAvBggrBgEFBQcwAYYjaHR0cDovL29jc3AuaW50LXgz
LmxldHNlbmNyeXB0Lm9yZy8wLwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14
My5sZXRzZW5jcnlwdC5vcmcvMEEGA1UdEQQ6MDiCFnNlY3VyZS11cy51bml2YWRp
cy5jb22CDHVuaXZhZGlzLmNvbYIQd3d3LnVuaXZhZGlzLmNvbTCB/gYDVR0gBIH2
MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYBBQUHAgEWGmh0
dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCBngyBm1RoaXMg
Q2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkgUmVseWluZyBQ
YXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ2VydGlmaWNh
dGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL3JlcG9z
aXRvcnkvMA0GCSqGSIb3DQEBCwUAA4IBAQCaSsks1yFmPl1nakpOlkhDnOZZsCtg
5S8PP/ddYQUX/59LrXey4IbRLrncrYp1u9XJdi5WDCgYe4tY5j0O9Un20Xm7p1q+
IRo70bfXZZZ7n00HHkeSphiS0w5ADnsbBwYXz0gejr8e7qGWYttoG03gZNE9G0u2
2HzK0OKWfmXz/I11bJXuWjcxp716A71WkX1oXWB2gwSXdf3FR/t2oZKi/bQQVSVw
QOPbu58t/LujQjAK8t2o86P47PoOIKgkyBdHOjwWq3897MOaLhj+HEIX1noWAdie
2KvuHn20O9liOEExGNMKR7gnL9XZWZGdo6RwYPuOGci6pP4+Gjh3bf5w
-----END CERTIFICATE-----
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
03:e4:17:7f:bf:d1:f1:d1:22:c5:4f:8d:bf:c8:18:5f:8e:9f
Signature Algorithm: sha256WithRSAEncryption
Issuer:
commonName = Let's Encrypt Authority X3
organizationName = Let's Encrypt
countryName = US
Validity
Not Before: Nov 14 05:00:00 2016 GMT
Not After : Feb 12 05:00:00 2017 GMT
Subject:
commonName = univadis.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (4096 bit)
Modulus:
00:c1:db:ee:57:67:ae:5f:51:32:78:e3:20:2d:14:
e2:da:ab:be:ba:45:ed:b1:8e:ef:67:de:b5:76:f5:
56:62:bc:11:9c:56:b4:8a:74:2f:8f:ab:89:b4:e9:
63:f5:d5:75:22:e4:50:53:47:1f:7a:eb:d9:ca:ec:
6e:52:1b:12:ca:91:89:af:28:9e:40:ba:63:30:b9:
52:25:6a:20:cf:4b:6e:a8:be:36:35:82:a7:a4:9f:
c5:f9:6e:c6:4c:e2:70:a8:0d:33:5b:6f:59:f2:2d:
47:a0:1e:a0:ca:7b:b8:13:c2:fa:4a:ce:bd:6f:45:
2d:dd:60:d7:0d:87:ac:46:42:79:70:58:8c:ad:7f:
f2:6e:08:1f:7e:e8:e2:f7:54:62:79:7a:b0:6a:0c:
92:ef:18:ab:9f:ae:09:11:29:2b:c9:b5:a9:6a:6c:
91:ad:25:fb:0a:24:7c:d8:9d:47:32:65:87:21:a5:
47:e6:45:f4:52:a1:13:94:9f:0b:a4:42:69:0e:1b:
1c:e5:5c:a4:43:06:44:b4:aa:af:53:01:65:59:de:
f9:17:63:27:ee:ff:81:16:a5:30:42:f8:f5:80:9c:
85:db:4b:80:e8:41:11:bd:82:30:0c:b1:d6:58:6a:
3e:42:5d:68:bb:5a:5c:a4:3a:7f:f3:22:58:08:ac:
eb:d7:98:dd:33:b2:be:17:77:b8:a8:3d:71:8f:67:
1a:08:0e:53:c6:53:23:63:bf:2a:90:e9:26:ed:47:
26:be:a6:d6:6c:a1:48:19:a8:0f:17:79:6b:70:2b:
d5:99:bd:1c:06:b9:ab:62:ef:a9:9a:30:73:ed:ce:
7c:d1:a0:46:c2:1a:d6:4f:14:dd:04:78:3f:53:38:
84:91:0c:8e:59:ac:bf:7c:0c:15:21:ca:b4:b0:3c:
79:b4:db:85:e6:69:ab:14:f4:1d:97:cb:c7:2f:14:
b6:b8:bb:69:d0:7b:3c:37:55:e3:d7:6f:0c:0a:67:
e6:e9:91:c4:82:bb:ef:63:bf:1d:b9:fb:fa:a0:0b:
26:a9:0e:40:87:0a:0d:6e:58:3e:f8:14:49:b6:70:
23:d7:68:f3:4d:0f:19:c5:a5:d0:cc:bd:9a:58:07:
3b:c2:36:ce:69:57:e3:c0:14:42:2a:63:17:57:57:
fc:24:42:2d:40:1f:43:fe:40:6e:ff:f8:03:32:f6:
e8:55:33:c5:52:d4:59:41:cd:3c:5e:1f:21:12:f8:
d4:6d:01:43:12:14:fb:45:1e:8e:af:31:f7:8a:32:
ca:46:f6:91:d8:9a:97:c1:30:9e:23:69:13:7d:c6:
a3:d6:a5:09:5c:9d:77:5a:fa:86:81:90:bf:3a:cd:
6e:18:35
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Key Usage: critical
Digital Signature, Key Encipherment
X509v3 Extended Key Usage:
TLS Web Server Authentication, TLS Web Client Authentication
X509v3 Basic Constraints: critical
CA:FALSE
X509v3 Subject Key Identifier:
47:D7:0A:FE:83:84:08:D6:18:BD:92:92:DB:16:D3:0B:DC:0E:32:A8
X509v3 Authority Key Identifier:
keyid:A8:4A:6A:63:04:7D:DD:BA:E6:D1:39:B7:A6:45:65:EF:F3:A8:EC:A1
Authority Information Access:
OCSP - URI:http://ocsp.int-x3.letsencrypt.org/
CA Issuers - URI:http://cert.int-x3.letsencrypt.org/
X509v3 Subject Alternative Name:
DNS:secure-us.univadis.com, DNS:univadis.com, DNS:www.univadis.com
X509v3 Certificate Policies:
Policy: 2.23.140.1.2.1
Policy: 1.3.6.1.4.1.44947.1.1.1
CPS: http://cps.letsencrypt.org
User Notice:
Explicit Text: This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/
Signature Algorithm: sha256WithRSAEncryption
9a:4a:c9:2c:d7:21:66:3e:5d:67:6a:4a:4e:96:48:43:9c:e6:
59:b0:2b:60:e5:2f:0f:3f:f7:5d:61:05:17:ff:9f:4b:ad:77:
b2:e0:86:d1:2e:b9:dc:ad:8a:75:bb:d5:c9:76:2e:56:0c:28:
18:7b:8b:58:e6:3d:0e:f5:49:f6:d1:79:bb:a7:5a:be:21:1a:
3b:d1:b7:d7:65:96:7b:9f:4d:07:1e:47:92:a6:18:92:d3:0e:
40:0e:7b:1b:07:06:17:cf:48:1e:8e:bf:1e:ee:a1:96:62:db:
68:1b:4d:e0:64:d1:3d:1b:4b:b6:d8:7c:ca:d0:e2:96:7e:65:
f3:fc:8d:75:6c:95:ee:5a:37:31:a7:bd:7a:03:bd:56:91:7d:
68:5d:60:76:83:04:97:75:fd:c5:47:fb:76:a1:92:a2:fd:b4:
10:55:25:70:40:e3:db:bb:9f:2d:fc:bb:a3:42:30:0a:f2:dd:
a8:f3:a3:f8:ec:fa:0e:20:a8:24:c8:17:47:3a:3c:16:ab:7f:
3d:ec:c3:9a:2e:18:fe:1c:42:17:d6:7a:16:01:d8:9e:d8:ab:
ee:1e:7d:b4:3b:d9:62:38:41:31:18:d3:0a:47:b8:27:2f:d5:
d9:59:91:9d:a3:a4:70:60:fb:8e:19:c8:ba:a4:fe:3e:1a:38:
77:6d:fe:70
Certificate content
- Serial Number
- Validity period
- Subject
- Public Key
- Issuer
- Signature
Subject:
commonName = univadis.com
Issuer:
commonName = Let's Encrypt Authority X3
organizationName = Let's Encrypt
countryName = US
X509v3 Subject Key Identifier:
47:D7:0A:FE:83:84:08:D6:18:BD:92:92:DB:16:D3:0B:DC:0E:32:A8
X509v3 Authority Key Identifier:
keyid:A8:4A:6A:63:04:7D:DD:BA:E6:D1:39:B7:A6:45:65:EF:F3:A8:EC:A1
Subject:
commonName = Let's Encrypt Authority X3
organizationName = Let's Encrypt
countryName = US
Issuer:
commonName = DST Root CA X3
organizationName = Digital Signature Trust Co.
X509v3 Subject Key Identifier:
A8:4A:6A:63:04:7D:DD:BA:E6:D1:39:B7:A6:45:65:EF:F3:A8:EC:A1
X509v3 Authority Key Identifier:
keyid:C4:A7:B1:A4:7B:2C:71:FA:DB:E1:4B:90:75:FF:C4:15:60:85:89:10
Subject:
commonName = DST Root CA X3
organizationName = Digital Signature Trust Co.
X509v3 Subject Key Identifier:
C4:A7:B1:A4:7B:2C:71:FA:DB:E1:4B:90:75:FF:C4:15:60:85:89:10
X509v3 Basic Constraints: critical
CA:TRUE
Certificate Authority
$ head -3 /etc/ssl/certs/DST_Root_CA_X3.pem
-----BEGIN CERTIFICATE-----
MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
$ openssl x509 -in /etc/ssl/certs/DST_Root_CA_X3.pem -text -noout
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
44:af:b0:80:d6:a3:27:ba:89:30:39:86:2e:f8:40:6b
Signature Algorithm: sha1WithRSAEncryption
Issuer: O=Digital Signature Trust Co., CN=DST Root CA X3
Validity
Not Before: Sep 30 21:12:19 2000 GMT
Not After : Sep 30 14:01:15 2021 GMT
Subject: O=Digital Signature Trust Co., CN=DST Root CA X3
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:df:af:e9:97:50:08:83:57:b4:cc:62:65:f6:90:
82:ec:c7:d3:2c:6b:30:ca:5b:ec:d9:c3:7d:c7:40:
c1:18:14:8b:e0:e8:33:76:49:2a:e3:3f:21:49:93:
ac:4e:0e:af:3e:48:cb:65:ee:fc:d3:21:0f:65:d2:
2a:d9:32:8f:8c:e5:f7:77:b0:12:7b:b5:95:c0:89:
a3:a9:ba:ed:73:2e:7a:0c:06:32:83:a2:7e:8a:14:
30:cd:11:a0:e1:2a:38:b9:79:0a:31:fd:50:bd:80:
65:df:b7:51:63:83:c8:e2:88:61:ea:4b:61:81:ec:
52:6b:b9:a2:e2:4b:1a:28:9f:48:a3:9e:0c:da:09:
8e:3e:17:2e:1e:dd:20:df:5b:c6:2a:8a:ab:2e:bd:
70:ad:c5:0b:1a:25:90:74:72:c5:7b:6a:ab:34:d6:
30:89:ff:e5:68:13:7b:54:0b:c8:d6:ae:ec:5a:9c:
92:1e:3d:64:b3:8c:c6:df:bf:c9:41:70:ec:16:72:
d5:26:ec:38:55:39:43:d0:fc:fd:18:5c:40:f1:97:
eb:d5:9a:9b:8d:1d:ba:da:25:b9:c6:d8:df:c1:15:
02:3a:ab:da:6e:f1:3e:2e:f5:5c:08:9c:3c:d6:83:
69:e4:10:9b:19:2a:b6:29:57:e3:e5:3d:9b:9f:f0:
02:5d
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints: critical
CA:TRUE
X509v3 Key Usage: critical
Certificate Sign, CRL Sign
X509v3 Subject Key Identifier:
C4:A7:B1:A4:7B:2C:71:FA:DB:E1:4B:90:75:FF:C4:15:60:85:89:10
Signature Algorithm: sha1WithRSAEncryption
a3:1a:2c:9b:17:00:5c:a9:1e:ee:28:66:37:3a:bf:83:c7:3f:
4b:c3:09:a0:95:20:5d:e3:d9:59:44:d2:3e:0d:3e:bd:8a:4b:
a0:74:1f:ce:10:82:9c:74:1a:1d:7e:98:1a:dd:cb:13:4b:b3:
20:44:e4:91:e9:cc:fc:7d:a5:db:6a:e5:fe:e6:fd:e0:4e:dd:
b7:00:3a:b5:70:49:af:f2:e5:eb:02:f1:d1:02:8b:19:cb:94:
3a:5e:48:c4:18:1e:58:19:5f:1e:02:5a:f0:0c:f1:b1:ad:a9:
dc:59:86:8b:6e:e9:91:f5:86:ca:fa:b9:66:33:aa:59:5b:ce:
e2:a7:16:73:47:cb:2b:cc:99:b0:37:48:cf:e3:56:4b:f5:cf:
0f:0c:72:32:87:c6:f0:44:bb:53:72:6d:43:f5:26:48:9a:52:
67:b7:58:ab:fe:67:76:71:78:db:0d:a2:56:14:13:39:24:31:
85:a2:a8:02:5a:30:47:e1:dd:50:07:bc:02:09:90:00:eb:64:
63:60:9b:16:bc:88:c9:12:e6:d2:7d:91:8b:f9:3d:32:8d:65:
b4:e9:7c:b1:57:76:ea:c5:b6:28:39:bf:15:65:1c:c8:f6:77:
96:6a:0a:8d:77:0b:d8:91:0b:04:8e:07:db:29:b6:0a:ee:9d:
82:35:35:10
$ curl -I https://www.univadis.com
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: http://curl.haxx.se/docs/sslcerts.html
curl performs SSL certificate verification by default, using a "bundle"
of Certificate Authority (CA) public keys (CA certs). If the default
bundle file isn't adequate, you can specify an alternate file
using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
the bundle, the certificate verification probably failed due to a
problem with the certificate (it might be expired, or the name might
not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
the -k (or --insecure) option.
$ docker run --rm -ti debian bash
$ apt-get update
$ apt-get install -y --no-install-recommends curl
$ apt-get install -y --no-install-recommends ca-certificates
$ curl -I https://www.univadis.com
HTTP/1.1 200 OK
DV
Domain Validation
~ 150$
/year
OV
Organisation Validation
~ 250$
/year
EV
Extended Validation
~ 450$
/year
https://github.com/letsencrypt/letsencrypt
Pro
- free
- fully automated
- not auth required
- SANs
Con
- 90 days validity
- no wildcard
- no OV / EV
select algorithms
https://www.ssllabs.com/ssltest/
# apache2.conf
SSLHonorCipherOrder on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
https://mozilla.github.io/server-side-tls/ssl-config-generator/
Architecture
Web Server
Pro:
- Easy to setup
Con:
- Not scalable
Load Balancer
Web Server
Web Server
Pro:
- Only one certificate
Con:
- Man in the middle attack
Load Balancer
Web Server
Web Server
Pro:
- fully secured
Con:
- Many certificate locations
- No session balancing
Load Balancer
Web Server
Web Server
Reverse Proxy
Questions ?
One more thing
What others know
What I know
What I think
What I know
Reallity
Knowledge
Aptus talk #1 ?
- Cryptography symmetric and asymmetric
- What's docker, how it works
- Docker in production, how to scale, and monitor
- End 2 End encryption
- Javascript Event Loop and promise
- Javascript advanced with ES6
- AngularJs, React, Redux and co.
- Mongodb and it aggregation framework
- Security vulnerabilities and OWASP
- Git and successful branching model
- Functional testing with gherkin language
- Photography
- ...
S is for Secure
By Jérémy DERUSSÉ
S is for Secure
- 1,908