debugs(33, 5, HERE << "Error while bumping: " << sslConnectHostOrIp);
Ip::Address intendedDest;
intendedDest = sslConnectHostOrIp.termedBuf();
+ const bool isConnectRequest = !port->spoof_client_ip && !port->intercepted;
+
// Squid serves its own error page and closes, so we want
// a CN that causes no additional browser errors. Possible
- // only when bumping CONNECT which uses a host name.
- if (intendedDest.IsAnyAddr())
+ // only when bumping CONNECT with a user-typed address.
+ if (intendedDest.IsAnyAddr() || isConnectRequest)
sslCommonName = sslConnectHostOrIp;
else if (sslServerBump->serverCert.get())
sslCommonName = Ssl::CommonHostName(sslServerBump->serverCert.get());
#include "MemObject.h"
#include "pconn.h"
#include "PeerSelectState.h"
+#include "ProtoPort.h"
#include "SquidTime.h"
#include "Store.h"
#include "icmp/net_db.h"
}
}
- if (request->flags.sslPeek && request->GetHostIsNumeric()) {
- // If possible, set host name to server certificate CN unless
- // we already got the right name (from the CONNECT request).
+ const bool isConnectRequest = !request->clientConnectionManager->port->spoof_client_ip &&
+ !request->clientConnectionManager->port->intercepted;
+ // For intercepted connections, set host name to server
+ // certificate CN. Otherwise, we hope that CONNECT is using
+ // a user-entered address (a host name or a user-entered IP).
+ if (request->flags.sslPeek && !isConnectRequest) {
if (X509 *srvX509 = errDetails->peerCert()) {
if (const char *name = Ssl::CommonHostName(srvX509)) {
request->SetHost(name);
} else {
// While we are peeking at the certificate, we may not know the server
// name that the client will request (after interception or CONNECT)
- // unless it was the CONNECT request which used a host name. Some
- // browsers are using IP addresses in CONNECT requests.
+ // unless it was the CONNECT request with a user-typed address.
const char *hostname = request->GetHost();
const bool hostnameIsIp = request->GetHostIsNumeric();
- if (!request->flags.sslPeek || !hostnameIsIp)
+ const bool isConnectRequest = !request->clientConnectionManager->port->spoof_client_ip &&
+ !request->clientConnectionManager->port->intercepted;
+ if (!request->flags.sslPeek || isConnectRequest)
SSL_set_ex_data(ssl, ssl_ex_index_server, (void*)hostname);
// Use SNI TLS extension only when we connect directly