Неочевидные детали при запуске https в ok.ru / Андрей Домась...
TRANSCRIPT
Неочевидные детали при запуске HTTPS в OK.RuАндрей Домась
Кто я такой?
Андрей ДомасьОдноклассникиВедущий системный администратор
Нехорошие операторы и провайдеры
Нехорошие операторы и провайдерыУскорение загрузки страниц
Нехорошие операторы и провайдерыУскорение загрузки страницФинансовые сервисы
Как устроен TLSШифрыСертификат X.509“Правильные” настройки сервера
Как устроен TLSШифрыСертификат X.509“Правильные” настройки сервера
https://wiki.mozilla.org/Security/Server_Side_TLS
Неочевидные детали при запуске HTTPS в OK.Ru
Чего мы опасались?
1.Нужно еще больше серверов
Чего мы опасались?
1.Нужно еще больше серверов2.Появится Mixed Content
Чего мы опасались?
1.Нужно еще больше серверов2.Появится Mixed Content3.Что-то начнет тормозить
Round-Trip Time (RTT)
Client ServerSYN
SYN/ACK
ACK
Round-Trip Time (RTT)
Client ServerSYN
SYN/ACK
ACK
New York: 200 ms200 ms
Round-Trip Time (RTT)
Client ServerSYN
SYN/ACK
ACK
ClientHello
ServerHello
Client Key Exchange
Server Finish
New York: 200 ms200 ms
400 ms
Round-Trip Time (RTT)
Client ServerSYN
SYN/ACK
ACK
ClientHello
ServerHello
Client Key Exchange
Server Finish
New York: 200 ms200 ms
400 ms
0.6 sec
Round-Trip Time (RTT)
Client ServerSYN
SYN/ACK
ACK
ClientHello
ServerHello
Client Key Exchange
Server Finish
New York: 200 ms200 ms
400 ms
0.6 sec1 mln MUA in US
1. Нужно еще больше серверов2. Появится Mixed Content3. Что-то начнет тормозить
Чего мы опасались?
CPU & RTT
Browser WEB-siteHTTPS
Browser WEB-siteHTTPS
Ciphers Ciphers
Cert Cert
Browser WEB-siteHTTPS
Master Key
Ciphers Ciphers
Master Key
Cert Cert
Master Key Exchange
Browser WEB-siteHTTPS
Master Key
Ciphers Ciphers
Master Key
Cert Cert
Master Key Exchange
TLS session TLS session
Browser WEB-siteHTTPS
Master Key
Ciphers Ciphers
Master Key
Cert Cert
Master Key Exchange
Full Handshake
Browser WEB-siteHTTPS
Master Key
Ciphers Ciphers
Master Key
1 Round-TripCPU intensive!
Cert Cert
Master Key Exchange
Full Handshake
Client Server
Full Handshake
Client Server
Full Handshake
TLS-sessionTLS-session
Client Server
Full Handshake
TLS-sessionid: 12345
session-id: 12345TLS-sessionid: 12345
Client Server
Full Handshake
TLS-sessionid: 12345
session-id: 12345
session-id: 12345
TLS-sessionid: 12345
check/restore
Client Server
Full Handshake
TLS-sessionid: 12345
session-id: 12345
session-id: 12345
TLS-sessionid: 12345
check/restore
Abbreviated Handshake
Client Server
Full Handshake
TLS-sessionid: 12345
session-id: 12345
session-id: 12345
TLS-sessionid: 12345
Server2
check/restore
Client Server
Full Handshake
TLS-sessionTLS-session
Client Server
Full Handshake
TLS-sessionTLS-session
keyticketticket
Client Server
Full Handshake
TLS-sessionTLS-session
keyticketticket
Client Server
Full Handshake
TLS-sessionTLS-session
keyticketticket
check/restore
Client Server
Full Handshake
TLS-sessionTLS-session
keyticketticket
check/restore
Abbreviated Handshake
Client Server
Full Handshake
TLS-sessionTLS-session
keyticketticket
check/restore
Abbreviated Handshake
Client Server
Full Handshake
TLS-sessionTLS-session
keyticketticket
check/restore
Abbreviated Handshake
rfc 5077
,
APRone-nio
APRone-nio
Client
nginx
ticket
Client
nginx
ticket
ticket
nginx
Client
nginx
ticket
ticket
nginx
Client
nginx
ticket
ticket
nginx
ticket
Client
nginx
ticket
ticket
nginx
haproxy
Client
nginx
ticket
ticket
nginx
haproxy
ticket
Application(server)
Application(server)
Session
ticketApplication
(server)
Session
ticketApplication
(server)
Session
Session Context“text”
ticketApplication
(server)
Session
Session Context“text”
“text”
ticketApplication
(server)
Session
Session Context“text”
“text”
“text”?
Session Context
“...it would be possible, to re-import a session generated from another context (e.g. another application), which might lead to malfunctions.”
Session Context
• Apache Tomcat Native: “_default_:443”• nginx: “HTTP”• haproxy: “haproxy”
Client Server
Full Handshake
TLS-sessionTLS-session
keyticketticket
check/restore
Abbreviated Handshake
Client
Full Handshake
TLS-sessionTLS-session
keyticket
check/restore
Abbreviated Handshake
ticket
Server
FQDN + port
Что в итоге?
Можно ли использовать везде один ключ?
Нужно еще меньше CPU!
AVX/AVX2
AVX/AVX2 + openssl 1.0.2
AVX (20%) Session Ticket (15%)
На что еще клиент тратит время?
Certificate authority
(CA)
Certificate authority
(CA)Certificates
Certificate authority
(CA)Certificates
Browser WEB-site
Certificate authority
(CA)Certificates
Browser WEB-siteHTTPS
Certificate authority
(CA)Certificates
Browser WEB-siteHTTPS
Certificate authority
(CA)Certificates
Browser WEB-siteHTTPS
revoked
Certificate authority
(CA)Certificates
Browser WEB-siteHTTPS
revoked
Certificate authority
(CA)Certificates
Browser WEB-siteHTTPS
revoked
OCSP
signature
OCSP - Online Certificate Status Protocol
Certificate authority
(CA)Certificates
Browser WEB-siteHTTPS
revoked
OCSP
signature
Certificate authority
(CA)Certificates
Browser WEB-siteHTTPS
revoked
OCSP
signature
OCSP Stapling
Каков выигрыш?
Каков выигрыш?
67 ms
Каков выигрыш?
67 ms+200 ms
25%
1.Сломался механизм ротации OCSP: downtime
1.Сломался механизм ротации OCSP: downtime2.Плохой OCSP-ответ: downtime
1.Сломался механизм ротации OCSP: downtime2.Плохой OCSP-ответ: downtime3.Меняем серверный сертификат: downtime
Механизм отключения OCSP Stapling
Mixed Content
1.Что в нем плохого?2.В чем сложность борьбы с ним?
Mixed Content
Active● <script> (src attribute)● <link> (href attribute) (this includes CSS
stylesheets)● <iframe> (src attribute)● XMLHttpRequest requests● All cases in CSS where a url value is used (
@font-face, cursor, background-image, and so forth).
● <object> (data attribute)
Passive● <img> (src attribute)● <audio> (src attribute)● <video> (src attribute)● <object> subresources
В чем сложность?
1.Он происходит в браузере
В чем сложность?
1.Он происходит в браузере2.На странице много чужих ресурсов
Content-Security-Policy
Content-Security-Policy
Content-Security-Policy-Report-Only
POST { "blocked-uri": "http://homeland.ugo-games.com", "document-uri": "https://ok.ru/appsPreset/https_games/", "effective-directive": "img-src", "original-policy": "default-src data: blob: about: 'self' 'unsafe-inline' 'unsafe-eval' https:; report-uri /csp/report?always;", "referrer": "https://ok.ru/web/gwt/3e8af28/one.app.community.dk.gwt.dm.block.Block/BF2E365744786A74515E6A4678785A4A.cache.html", "status-code": 0, "violated-directive": "default-src data: blob: about: 'self' 'unsafe-inline' 'unsafe-eval' https:"}
{ "blocked-uri": "safari-extension://com.evernote.safari.clipper-q79wdw8yh9", "document-uri": https://connect.ok.ru/dk?st.cmd=WidgetShare&st....", "original-policy": "default-src data: blob: about: 'self' 'unsafe-inline' 'unsafe-eval' https:; report-uri /csp/report?always;", "referrer": "http://fishki.net/1819857-chego-nelzja-delat-na-kube.html", "violated-directive": "default-src data: blob: about: 'self' 'unsafe-inline' 'unsafe-eval' https:"}
Редирект на HTTPS
Редирект на HTTPS
• Старые смартфоны
Редирект на HTTPS
• Старые смартфоны:• Смартфон: RSA 1024 bits
Редирект на HTTPS
• Старые смартфоны:• Смартфон: RSA 1024 bits• Наш TLS: RSA 2048 bits
Редирект на HTTPS
• Старые смартфоны:• Смартфон: RSA 1024 bits• Наш TLS: RSA 2048 bits
• SmartTV: тормозят
Редирект на HTTPS
• Старые смартфоны:• Смартфон: RSA 1024 bits• Наш TLS: RSA 2048 bits
• SmartTV: тормозят• Пароли не подходят!
• Лучше иметь отдельный ключ для шифрования TLS-тикетов
• Лучше иметь отдельный ключ для шифрования TLS-тикетов• Оперативное отключение OCSP Stapling
• Лучше иметь отдельный ключ для шифрования TLS-тикетов• Оперативное отключение OCSP Stapling• Mixed Content: используйте CSP-reports, но много мусора
• Лучше иметь отдельный ключ для шифрования TLS-тикетов• Оперативное отключение OCSP Stapling• Mixed Content: используйте CSP-reports, но много мусора• Надо что-то делать со старыми клиентами
• Лучше иметь отдельный ключ для шифрования TLS-тикетов• Оперативное отключение OCSP Stapling• Mixed Content: используйте CSP-reports, но много мусора• Надо что-то делать со старыми клиентами• Браузеры забудут сохраненные пароли
Андрей Домась
https://habrahabr.ru/company/[email protected]