<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="font-family: Monospace;">
<div>Hi,</div>
<div><br>
</div>
<div>I needed to setup Squid as a transparent proxy with SSL bumping for only one single https website.</div>
<div>The goal was to bump https connections to this website with its offical signed SSL certificate.</div>
<div><br>
</div>
<div>As an illustration:</div>
<div><br>
</div>
<div>Website/hostname: https://abc.mydomain.com</div>
<div>DNS: abc.mydomain.com A 1.2.3.4</div>
<div>Official wildcard certificate: CN = *.mydomain.com (server.crt, server.key)</div>
<div><br>
</div>
<div>I used Squid 3.4.10 from CentOS repository and configured iptables DNAT rules for intercepting.</div>
<div><br>
</div>
<div>Squid config:</div>
<div>https_port <squid-ip>:3443 intercept ssl-bump cert=<server.crt> key=<server.key></div>
<div>acl MYSITE dst 1.2.3.4</div>
<div>ssl_bump server-first MYSITE</div>
<div>ssl_bump none all</div>
<div><br>
</div>
<div>Everything worked perfectly. All traffic to https://abc.mydomain.com was bumped for caching purposes,</div>
<div>all traffic to other https websites was simply tunneled. Squid did not need to generate faked server certificates</div>
<div>and clients were left untouched (no proxy settings, no self-signed CA).</div>
<div><br>
</div>
<div>Now some parts of the website are delivered by Amazon CloudFront. CloudFront has the SSL certificate installed</div>
<div>(same official signed certificate as mentiod above).</div>
<div><br>
</div>
<div>Additional website/hostname: https://xyz.mydomain.com</div>
<div>DNS: xyz.mydomain.com CNAME <distribution>.cloudfront.net</div>
<div>Official wildcard certificate: CN = *.mydomain.com (server.crt, server.key)</div>
<div><br>
</div>
<div>I cannot simply extend my ACL with all destination IPs used by CloudFront, because these are shared IPs and</div>
<div>CloudFront needs to know which domain/hostname is asked to provide the correct certificate. Usually a client</div>
<div>uses the SNI extension of TLS to transmit the required domain/hostname.</div>
<div><br>
</div>
<div>I have heard of the new "SSL Peek and Splice" feature in Squid 3.5 but don't get it working (Squid 3.5.9).</div>
<div><br>
</div>
<div>My assumption is that I have to use in Squid's config:</div>
<div>
<div>https_port <squid-ip>:3443 intercept ssl-bump cert=<server.crt> key=<server.key></div>
<div>acl MYSITE ssl:server_name .mydomain.com</div>
<div>ssl_bump bump MYSITE</div>
<div>ssl_bump splice all</div>
</div>
<div><br>
</div>
<div>This results in tunneling all https traffic, nothing will be bumped and cached. I'm a little bit confused about the</div>
<div>documentation:</div>
<div><br>
</div>
<div>Under the headline "Processing steps":</div>
<div><b>Step 2:</b></div>
<p class="line867"><span class="anchor" id="line-51"></span></p>
<ol type="i">
<li>Get TLS clientHello info, including <b>SNI</b> where available. </li></ol>
<div><br>
</div>
<div>Under the headline "Actions":</div>
<div>peek/stare Receive client <b>SNI (step1)</b>, ...</div>
<div><br>
</div>
<div>Is it possible to achieve my goal with Squid in transparent mode?</div>
<div>In other words: Is there a way to bump https connections to destinations with shared IPs?</div>
<div><br>
</div>
<div>Best,</div>
<div>Stefan</div>
<div><br>
</div>
</body>
</html>