Добрый день. Никак не могу разобраться в следующем вопросе. У нас есть web сервер, работающий по протоколу https. Протокол https реализован посредством самоподписанного ssl сертификата. Вопрос: при доступе клиента к серверу по протоколу https шифрование данных обеспечивается в обе стороны (от клиента к серверу и от сервера к клиенту) или только от клиента к серверу? Вопрос возник по какой причине: для шифрования по https нужны 2 ключа - закрытый и открытый. Закрытый лежит в недоступном хранилище, открытый, соответственно в публичном доступе. Клиент подключаясь получает публичный ключ, которым шифрует данные. Сервер, соответственно, при получении данных расшифровывает их с помощью закрытого ключа. Тут все ясно. Как обстоят дела с данным, передаваемыми от сервера к клиенту? Чем их шифровать? Никаких других сертификатов нет. Даже если предположить, что они будут зашифрованы с помощью закрытого ключа, то любой желающий сможет их спокойно расшифровать т.к. открытый ключ в публичном доступе. Вот и возник вопрос, а шифруются ли они вообще?
коллега не забывайте что стороне клиента так же генерируется некий рандомный симметричный шифр K(называют по разному но в основном session key), которое шифруется публичном ключем сервера и передается серверу. далее сервер используя свой закрытый ключ расшифровывает этот ключ K. т.е. этот ключ знают ТОЛЬКО клиент и сервер в рамках сессии HTTPS и которое далее используется для шифрования и расшифровывания сообщений. клиент шифрует данные при помощи К, сервер расшифровывает данные от клиента. когда сервер отправляет данные то он шифрует его с К, а клиент расшифровывает егоа так получается, если судить по вашей теории: что любой может публичным ключем сервера шифровать(потому что он доступный), так как сервер всегда будет его расшифровывать удачно потому что на сервере закрытый ключ. должна же быть некая изюминка, которая участвует только между этими двумя о которой знают только обе стороны :)
кратко говоря используются Симметричное шифрование данных внутри Асимметричного шифрования, мясорубка %)
>[оверквотинг удален]
> шифрования и расшифровывания сообщений. клиент шифрует данные при помощи К, сервер
> расшифровывает данные от клиента. когда сервер отправляет данные то он шифрует
> его с К, а клиент расшифровывает его
> а так получается, если судить по вашей теории: что любой может публичным
> ключем сервера шифровать(потому что он доступный), так как сервер всегда будет
> его расшифровывать удачно потому что на сервере закрытый ключ. должна же
> быть некая изюминка, которая участвует только между этими двумя о которой
> знают только обе стороны :)
> кратко говоря используются Симметричное шифрование данных внутри Асимметричного шифрования,
> мясорубка %)И можно быть уверенным в том, что любой WEB браузер или любое другое приложение, взаимодействующее с сервером через https генерирует свой session key? Т.е. это необходимое требование для взаимодействия по данному протоколу и если оно не будет выполнено взаимодействия просто не будет?
> И можно быть уверенным в том, что любой WEB браузер или любое
> другое приложение, взаимодействующее с сервером через https генерирует свой session key?
> Т.е. это необходимое требование для взаимодействия по данному протоколу и если
> оно не будет выполнено взаимодействия просто не будет?на этом принципе и работают все, на то и стандарты. применимо не только для https, но других протоколах где задействовано SSL/TLS. марш читать книжки на ночь
для начала:
https://en.wikipedia.org/wiki/Transport_Layer_Security
https://en.wikipedia.org/wiki/Public-key_cryptographyи добавок не путайте схожие по названию но разные понятия типа PHPSESSIONID, JSESSIONID и т.д. в веб приложениях с "session key" в сеансе TLS
При наличии бесплатных сертификатов от Let's Encrypt[1] и WoSign[2] использовать само-подписанную - не очень разумно и чревато MITM.Как Вам уже сказали - шифруется все, но правильно настраивать веб сервер для надежного TLS нужно еще уметь, если что - проверяйте как у Вас получилось настроить безопасность сервера по этим ссылкам [3][4].
[1] https://letsencrypt.org/
[2] https://buy.wosign.com/free/
[3] https://www.ssllabs.com/ssltest/
[4] https://securityheaders.io/