544 if has_https: |
544 if has_https: |
545 class BetterHTTPS(httplib.HTTPSConnection): |
545 class BetterHTTPS(httplib.HTTPSConnection): |
546 send = keepalive.safesend |
546 send = keepalive.safesend |
547 |
547 |
548 def connect(self): |
548 def connect(self): |
|
549 self.sock = _create_connection((self.host, self.port)) |
|
550 |
549 host = self.host |
551 host = self.host |
550 cacerts = self.ui.config('web', 'cacerts') |
552 cacerts = self.ui.config('web', 'cacerts') |
551 hostfingerprint = self.ui.config('hostfingerprints', host) |
553 hostfingerprint = self.ui.config('hostfingerprints', host) |
552 |
554 |
553 if cacerts and not hostfingerprint: |
555 if cacerts and not hostfingerprint: |
554 sock = _create_connection((self.host, self.port)) |
|
555 self.sock = _ssl_wrap_socket(self.sock, self.key_file, |
556 self.sock = _ssl_wrap_socket(self.sock, self.key_file, |
556 self.cert_file, cert_reqs=CERT_REQUIRED, |
557 self.cert_file, cert_reqs=CERT_REQUIRED, |
557 ca_certs=util.expandpath(cacerts)) |
558 ca_certs=util.expandpath(cacerts)) |
558 msg = _verifycert(self.sock.getpeercert(), host) |
559 msg = _verifycert(self.sock.getpeercert(), host) |
559 if msg: |
560 if msg: |
560 raise util.Abort(_('%s certificate error: %s ' |
561 raise util.Abort(_('%s certificate error: %s ' |
561 '(use --insecure to connect ' |
562 '(use --insecure to connect ' |
562 'insecurely)') % (host, msg)) |
563 'insecurely)') % (host, msg)) |
563 self.ui.debug('%s certificate successfully verified\n' % host) |
564 self.ui.debug('%s certificate successfully verified\n' % host) |
564 else: |
565 else: |
565 httplib.HTTPSConnection.connect(self) |
566 self.sock = _ssl_wrap_socket(self.sock, self.key_file, |
|
567 self.cert_file) |
566 if hasattr(self.sock, 'getpeercert'): |
568 if hasattr(self.sock, 'getpeercert'): |
567 peercert = self.sock.getpeercert(True) |
569 peercert = self.sock.getpeercert(True) |
568 peerfingerprint = util.sha1(peercert).hexdigest() |
570 peerfingerprint = util.sha1(peercert).hexdigest() |
569 nicefingerprint = ":".join([peerfingerprint[x:x + 2] |
571 nicefingerprint = ":".join([peerfingerprint[x:x + 2] |
570 for x in xrange(0, len(peerfingerprint), 2)]) |
572 for x in xrange(0, len(peerfingerprint), 2)]) |