У меня есть сервер, к которому оборудование в удаленных местах в частных сетях подключается через Интернет с помощью SSL. Установлен сертификат SSL для доменного имени сервера. У меня есть несколько устройств, которые проходят через прокси-сервер для подключения к серверу и не могут использовать доменное имя для подключения, а вместо этого используют IP-адрес сервера. Некоторые устройства подключаются и обмениваются данными успешно. У меня есть новый, который выдает ошибку сертификата, когда пытается подключиться и не общается. Журнал WireShark для проблемного устройства выглядит следующим образом:
No. Time Source Destination Protocol Length Info
75 124.992557 cc.e.135.194 aaa.bb.165.30 HTTP 93 CONNECT xxx.yy.177.237:443 HTTP/1.1
No. Time Source Destination Protocol Length Info
76 124.992762 aaa.bb.165.30 cc.e.135.194 TCP 60 http-alt > screencast [ACK] Seq=1 Ack=40 Win=5840 Len=0
No. Time Source Destination Protocol Length Info
77 125.019946 aaa.bb.165.30 cc.e.135.194 HTTP 93 HTTP/1.1 200 Connection established
No. Time Source Destination Protocol Length Info
78 125.021486 cc.e.135.194 aaa.bb.165.30 TCP 60 screencast > http-alt [ACK] Seq=40 Ack=40 Win=3600 Len=0
No. Time Source Destination Protocol Length Info
79 125.023154 cc.e.135.194 aaa.bb.165.30 TLSv1 112 Client Hello
No. Time Source Destination Protocol Length Info
80 125.063292 aaa.bb.165.30 cc.e.135.194 TCP 60 http-alt > screencast [ACK] Seq=40 Ack=98 Win=5840 Len=0
No. Time Source Destination Protocol Length Info
81 125.802441 aaa.bb.165.30 cc.e.135.194 TLSv1 590 Server Hello
No. Time Source Destination Protocol Length Info
82 125.802545 aaa.bb.165.30 cc.e.135.194 TCP 590 [TCP segment of a reassembled PDU]
No. Time Source Destination Protocol Length Info
83 125.803882 cc.e.135.194 aaa.bb.165.30 TCP 60 screencast > http-alt [ACK] Seq=98 Ack=576 Win=3600 Len=0
No. Time Source Destination Protocol Length Info
84 125.806427 cc.e.135.194 aaa.bb.165.30 TCP 60 screencast > http-alt [ACK] Seq=98 Ack=1112 Win=3600 Len=0
No. Time Source Destination Protocol Length Info
85 125.835481 aaa.bb.165.30 cc.e.135.194 TCP 590 [TCP segment of a reassembled PDU]
No. Time Source Destination Protocol Length Info
86 125.835606 aaa.bb.165.30 cc.e.135.194 TCP 590 [TCP segment of a reassembled PDU]
No. Time Source Destination Protocol Length Info
87 125.835607 aaa.bb.165.30 cc.e.135.194 TLSv1 98 Certificate
No. Time Source Destination Protocol Length Info
88 125.837384 cc.e.135.194 aaa.bb.165.30 TCP 60 screencast > http-alt [ACK] Seq=98 Ack=1648 Win=3600 Len=0
No. Time Source Destination Protocol Length Info
89 125.839309 cc.e.135.194 aaa.bb.165.30 TCP 60 screencast > http-alt [ACK] Seq=98 Ack=2184 Win=3600 Len=0
No. Time Source Destination Protocol Length Info
90 125.996227 cc.e.135.210 cc.e.135.223 UDP 93 Source port: di-traceware Destination port: di-traceware
No. Time Source Destination Protocol Length Info
91 126.041261 aaa.bb.165.30 cc.e.135.194 TCP 98 [TCP Retransmission] http-alt > screencast [PSH, ACK] Seq=2184 Ack=98 Win=5840 Len=44[Reassembly error, protocol TCP: New fragment overlaps old data (retransmission?)]
No. Time Source Destination Protocol Length Info
92 126.126265 cc.e.135.194 aaa.bb.165.30 TCP 60 screencast > http-alt [ACK] Seq=98 Ack=2228 Win=3600 Len=0
No. Time Source Destination Protocol Length Info
93 126.127579 cc.e.135.194 aaa.bb.165.30 TLSv1 61 Alert (Level: Fatal, Description: Bad Certificate)
No. Time Source Destination Protocol Length Info
94 126.127769 aaa.bb.165.30 cc.e.135.194 TCP 60 http-alt > screencast [ACK] Seq=2228 Ack=105 Win=5840 Len=0
No. Time Source Destination Protocol Length Info
95 126.128131 cc.e.135.194 aaa.bb.165.30 TCP 60 screencast > http-alt [FIN, ACK] Seq=105 Ack=2228 Win=3600 Len=0
No. Time Source Destination Protocol Length Info
96 126.128973 cc.e.135.194 aaa.bb.165.30 TCP 60 [TCP Dup ACK 95#1] screencast > http-alt [ACK] Seq=106 Ack=2228 Win=3600 Len=0
Журнал WireShark для хорошего подключения устройства выглядит следующим образом:
No. Time Source Destination Protocol Length Info
41 18.643335000 192.168.1.77 192.168.1.66 HTTP 93 CONNECT xxx.yy.177.237:443 HTTP/1.1
No. Time Source Destination Protocol Length Info
42 18.686919000 xxx.yy.177.237 192.168.1.66 TCP 66 https > 57090 [SYN, ACK] Seq=0 Ack=1 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1
No. Time Source Destination Protocol Length Info
43 18.690931000 192.168.1.77 192.168.1.66 TCP 60 iee-qfx > 808 [ACK] Seq=40 Ack=62 Win=3600 Len=0
No. Time Source Destination Protocol Length Info
44 18.692715000 192.168.1.77 192.168.1.66 HTTP 112 Continuation or non-HTTP traffic
No. Time Source Destination Protocol Length Info
45 18.730597000 xxx.yy.177.237 192.168.1.66 TCP 1514 [TCP segment of a reassembled PDU]
No. Time Source Destination Protocol Length Info
46 18.731017000 xxx.yy.177.237 192.168.1.66 TCP 1514 [TCP segment of a reassembled PDU]
No. Time Source Destination Protocol Length Info
47 18.853088000 192.168.1.77 192.168.1.66 TCP 60 iee-qfx > 808 [ACK] Seq=98 Ack=598 Win=3600 Len=0
No. Time Source Destination Protocol Length Info
48 18.855235000 192.168.1.77 192.168.1.66 TCP 60 iee-qfx > 808 [ACK] Seq=98 Ack=1134 Win=3600 Len=0
No. Time Source Destination Protocol Length Info
49 18.857397000 192.168.1.77 192.168.1.66 TCP 60 iee-qfx > 808 [ACK] Seq=98 Ack=1670 Win=3600 Len=0
No. Time Source Destination Protocol Length Info
50 18.858940000 192.168.1.77 192.168.1.66 TCP 60 iee-qfx > 808 [ACK] Seq=98 Ack=2206 Win=3600 Len=0
No. Time Source Destination Protocol Length Info
51 18.860676000 192.168.1.77 192.168.1.66 TCP 60 iee-qfx > 808 [ACK] Seq=98 Ack=2742 Win=3600 Len=0
No. Time Source Destination Protocol Length Info
52 18.861709000 192.168.1.77 192.168.1.66 TCP 60 iee-qfx > 808 [ACK] Seq=98 Ack=2982 Win=3600 Len=0
No. Time Source Destination Protocol Length Info
53 18.885573000 xxx.yy.177.237 192.168.1.66 TLSv1 456 Server Hello, Certificate, Server Hello Done
No. Time Source Destination Protocol Length Info
54 19.831490000 192.168.1.77 192.168.1.66 HTTP 380 Continuation or non-HTTP traffic
No. Time Source Destination Protocol Length Info
55 19.832368000 192.168.1.77 192.168.1.66 TCP 60 [TCP Dup ACK 54#1] iee-qfx > 808 [ACK] Seq=424 Ack=3384 Win=3600 Len=0
No. Time Source Destination Protocol Length Info
56 19.833752000 192.168.1.77 192.168.1.66 TCP 60 [TCP Dup ACK 54#2] iee-qfx > 808 [ACK] Seq=424 Ack=3384 Win=3600 Len=0
No. Time Source Destination Protocol Length Info
57 19.883478000 xxx.yy.177.237 192.168.1.66 TLSv1 113 Change Cipher Spec, Encrypted Handshake Message
No. Time Source Destination Protocol Length Info
59 19.910346000 192.168.1.77 192.168.1.66 HTTP 251 Continuation or non-HTTP traffic
No. Time Source Destination Protocol Length Info
60 20.115266000 192.168.1.77 192.168.1.66 TCP 107 [TCP segment of a reassembled PDU]
No. Time Source Destination Protocol Length Info
61 20.136330000 xxx.yy.177.237 192.168.1.66 TCP 54 https > 57090 [ACK] Seq=3382 Ack=582 Win=65024 Len=0
No. Time Source Destination Protocol Length Info
62 20.171317000 xxx.yy.177.237 192.168.1.66 TLSv1 299 Application Data
Может ли кто-нибудь дать представление о том, что здесь происходит и почему одни устройства обмениваются данными, а другие - нет, и какие передовые методы должны быть здесь (должен ли я получить сертификат для IP-адреса?). Интуитивно мне кажется, что мой сертификат предназначен для доменного имени, а не для IP-адреса, и поэтому должны быть проблемы, но у меня есть ряд устройств, которые годами поддерживали связь таким образом без проблем.
Предоставляемый вами дамп wirehark бесполезен, потому что он показывает информацию только на транспортном уровне (TCP), а не на уровне TLS. Он также не показывает никаких сообщений об ошибках от клиентов и не показывает, как клиенты используют эти прокси и как они проверяют сертификат.
Обычно для подключения TLS требуется проверка сертификата сервера, что включает в себя проверку цепочки доверия и имени в сертификате. Если имя не соответствует ожидаемому имени, проверка должна завершиться неудачей, потому что в противном случае вы могли бы использовать любой сертификат, выдавая себя за какой-либо другой хост, и, таким образом, провести атаку «человек посередине».
Это также означает, что если доступ осуществляется только по IP-адресу, тогда сертификат должен включать IP-адрес в качестве типа IP в разделе альтернативных имен субъектов (а лучше также в качестве типа DNS из-за некоторых сломанных стеков TLS).
Если некоторые клиенты терпят неудачу, а другие преуспевают, возможно, одни клиенты используют правильное имя хоста для проверки, а другие - нет, или некоторые клиенты игнорируют ошибки проверки. На основании вашей информации невозможно узнать, что из этого имеет место.
У меня есть несколько устройств, которые проходят через прокси-сервер для подключения к серверу и не могут использовать доменное имя для подключения, а вместо этого используют IP-адрес сервера.
Правильный клиент создает туннель с помощью HTTP-прокси (запрос CONNECT), а затем устанавливает TLS-соединение внутри этого туннеля и проверяет сертификат на соответствие исходному имени хоста. Вот как работают прокси-соединения в браузерах. И это то, что показывает ваш дамп wirehark. Обычно клиент предоставляет не IP-адрес цели в запросе CONNECT, а имя хоста, поэтому это может быть клиент, который либо разрешил имя хоста заранее, либо которому был предоставлен IP-адрес, а не имя хоста внутри конфигурации. В последнем случае клиент не сможет правильно проверить сертификат, потому что он не знает имя хоста, ожидаемого в сертификате, но будет ожидать IP-адрес, которого нет.