OpenSSL версия: OpenSSL 1.1.0g
Dev: lib libssl1.0-dev
Lang: C ++
У меня есть клиент-серверное приложение TCP-сокета (C ++Linux).Я создал самозаверяющий сертификат, и клиент, и сервер используют один и тот же файл сертификата (клиент и сервер работают в одном окне).
Чтобы создать сертификат, я запускаю следующую команду:
openssl genrsa -des3 -out server.key 2048
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
1 / КогдаЯ реализую SSL_CTX * ctx = SSL_CTX_new (SSLv23_method ()), соединение работает, и данные можно транспортировать, используя список шифров: «ALL:! ADH:! LOW:! EXP:! MD5: @STRENGTH»
2 / Когда я использую код: SSL_CTX * ctx = SSL_CTX_new (TLSv1_2_client_method ()) Соединение не установлено, и я получаю SSL_ERROR_SSL.
Если я изменю список шифров на «DHE-RSA-AES256-GCM»-SHA384 ", который должен работать с TLS, это не помогает.Я получаю ту же ошибку.
3 / Когда я запускаю: openssl s_client -connect xxxx: yy, когда на сервере запущена версия с SSLv23_method (), я получаю следующее:
... Новый, TLSv1.2, шифр - AES256-GCM-SHA384
Открытый ключ сервера - 2048 бит
Поддерживается безопасное повторное согласование
Сжатие: НЕТ
Расширение: НЕТ
Нет согласованного ALPN
SSL-сессия:
Protocol : TLSv1.2
Cipher : AES256-GCM-SHA384
...
Мой вопрос:
A / Я хочу иметь возможность использовать метод = TLSv1_2_client_method ().Нужно ли создавать сертификаты с разными параметрами команды?
B / Почему openssl s_client в случае 3 / использует протокол TLSv1.2, когда протокол сервера был определен методом = SSLv23_method ()?