2016-03-07 2 views
0

Я хотел бы использовать openssl s_client, чтобы открыть TLS-соединение через прокси (Squid) на исходном сервере с использованием метода запроса CONNECT. Я использую сертификат клиента для подключения к прокси-серверу, как показано ниже:openssl s_client TLS-соединение через прокси с clientAuth

openssl s_client -connect my_proxy:4443 -CAfile /etc/ssl/ca/ca.crt -cert /etc/ssl/cert/client.crt -key /etc/ssl/key/client_key.pem

После запуска выше, информация о соединении печатает нормально, а затем я ввожу CONNECT и GET методы, и это работает отлично:

CONNECT www.google.com:80 HTTP/1.1 Host: www.google.com

HTTP/1.1 200 Соединение установлено

GET /search?q=ip+address HTTP/1.1 Host: www.google.com

HTTP/1.1 200 OK

Однако, я действительно хотел бы быть в состоянии установить соединение TLS (HTTPS), но я не смог заставить его работать:

CONNECT www.google.com:443 HTTP/1.1 Host: www.google.com

HTTP/1.1 200 Соединение установлено

GET /search?q=ip+address HTTP/1.1

закрыт

Что я здесь делаю неправильно? Прежде чем вы скажете, чтобы попробовать OpenSSL 1.1.x с параметром -proxy, я уже пробовал это. Обратите внимание, что сертификат CA, клиентский сертификат и клиентский ключ в приведенной выше команде предназначены для подключения к моему прокси-серверу, а не для целевого сервера (google.com), как показано ниже с OpenSSL 1.1.0-pre3 (тот же вывод, если я попробуйте подключиться к Google: 443).

openssl s_client -connect google.com:80 -proxy my_proxy:4443 -CAfile /etc/ssl/ca/ca.crt -cert /etc/ssl/cert/client.crt -key /etc/ssl/key/client_key.pem

CONNECTED (00000003)

s_client: HTTP CONNECT не удалось

сертификат не равный доступен

Нет сертификата клиента имена CA не отправлено SSL рукопожатия прочитал 0 байт и написано 25 байт Подтверждение: ОК

New (NONE), Cipher не (NONE) Secure Повторных переговоров не поддерживаются сжатие: NONE Расширение: NONE Нет ALPN договорных

я смог загрузить мой клиент CERT, ключ клиента, и CA cert в Firefox (все в комплекте в файле pkcs12), и я могу подключиться к различным сайтам через TLS. Это должно быть возможно в командной строке.

+1

Stack Overflow - это сайт для вопросов программирования и разработки. Этот вопрос кажется вне темы, потому что речь идет не о программировании или разработке. См. [Какие темы можно задать здесь] (http://stackoverflow.com/help/on-topic) в Справочном центре. Возможно, лучше сказать [Суперпользователь] (http://superuser.com/) или [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/). Также см. [Где я пишу вопросы о Dev Ops?] (Http://meta.stackexchange.com/q/134306). – jww

ответ

0

Обратите внимание, что CA сертификат, клиент CERT и ключа клиента на выше команды предназначены для подключения к прокси-серверу, а не для -connect сервера «.

Сомневаюсь. По источник -proxy только используется, чтобы сделать туннель через прокси-сервер, т.е.

  • делает TCP подключения к данному прокси
  • отправляет запрос CONNECT с мишенью из -connect аргумент к прокси-серверу
  • ждет ответа от прокси-сервера, что туннель не утвердился
  • нет сертификатов участвует при создании туннеля, как это должно быть

Это должно быть возможно на командная строка.

Это возможно только с опцией -proxy. Версия s_client, у которой этого параметра еще нет, не может использоваться отдельно для установления соединения через прокси-сервер HTTP, потому что необходимая функциональность просто не реализована. Вы можете попытаться использовать s_client вместе с другими инструментами, которые обеспечат необходимый туннель, например socat или proxytunnel.

+0

Я редактировал вопрос, чтобы показать вывод с опцией '-proxy'. Мои сертификаты предназначены для подключения к моему прокси, а не к google.com. Кажется, что единственным аутентификационным прокси-сервером является пользователь: pass и NTLM. Я посмотрю и посмотрю, может ли то, что я собираюсь сделать, с помощью сотата. – vic

+0

@vic: я предполагаю, что для самого прокси-сервера требуется SSL (т. Е. Для прокси установлен 'https: // my_proxy: 4433', а не более общий' http: // my_proxy: 4433'), потому что иначе прямой 's_client 'к прокси не удалось бы. Но прокси, которые сами требуют SSL, не поддерживаются параметром '-proxy', и они не поддерживаются большинством других программ, которые используют HTTP-прокси. –

Смежные вопросы