test-https.t
380 lines
| 14.9 KiB
| text/troff
|
Tads3Lexer
/ tests / test-https.t
Matt Mackall
|
r22046 | #require serve ssl | ||
Mads Kiilerich
|
r12740 | |||
Matt Mackall
|
r22046 | Proper https client requires the built-in ssl from Python 2.6. | ||
Mads Kiilerich
|
r12740 | |||
Yuya Nishihara
|
r29331 | Make server certificates: | ||
Mads Kiilerich
|
r12741 | |||
Yuya Nishihara
|
r29331 | $ CERTSDIR="$TESTDIR/sslcerts" | ||
$ cat "$CERTSDIR/priv.pem" "$CERTSDIR/pub.pem" >> server.pem | ||||
$ PRIV=`pwd`/server.pem | ||||
$ cat "$CERTSDIR/priv.pem" "$CERTSDIR/pub-not-yet.pem" > server-not-yet.pem | ||||
$ cat "$CERTSDIR/priv.pem" "$CERTSDIR/pub-expired.pem" > server-expired.pem | ||||
Yuya Nishihara
|
r25413 | |||
Mads Kiilerich
|
r12740 | $ hg init test | ||
$ cd test | ||||
$ echo foo>foo | ||||
$ mkdir foo.d foo.d/bAr.hg.d foo.d/baR.d.hg | ||||
$ echo foo>foo.d/foo | ||||
$ echo bar>foo.d/bAr.hg.d/BaR | ||||
$ echo bar>foo.d/baR.d.hg/bAR | ||||
$ hg commit -A -m 1 | ||||
adding foo | ||||
adding foo.d/bAr.hg.d/BaR | ||||
adding foo.d/baR.d.hg/bAR | ||||
adding foo.d/foo | ||||
$ hg serve -p $HGPORT -d --pid-file=../hg0.pid --certificate=$PRIV | ||||
$ cat ../hg0.pid >> $DAEMON_PIDS | ||||
timeless
|
r13544 | cacert not found | ||
$ hg in --config web.cacerts=no-such.pem https://localhost:$HGPORT/ | ||||
abort: could not find web.cacerts: no-such.pem | ||||
[255] | ||||
Mads Kiilerich
|
r12740 | Test server address cannot be reused | ||
Adrian Buehlmann
|
r17023 | #if windows | ||
$ hg serve -p $HGPORT --certificate=$PRIV 2>&1 | ||||
Simon Heimberg
|
r18682 | abort: cannot start server at ':$HGPORT': | ||
Adrian Buehlmann
|
r17023 | [255] | ||
#else | ||||
Mads Kiilerich
|
r12740 | $ hg serve -p $HGPORT --certificate=$PRIV 2>&1 | ||
abort: cannot start server at ':$HGPORT': Address already in use | ||||
[255] | ||||
Adrian Buehlmann
|
r17023 | #endif | ||
Mads Kiilerich
|
r12740 | $ cd .. | ||
Gregory Szorc
|
r29288 | Our test cert is not signed by a trusted CA. It should fail to verify if | ||
we are able to load CA certs. | ||||
Mads Kiilerich
|
r22575 | |||
Yuya Nishihara
|
r24289 | #if defaultcacerts | ||
Mads Kiilerich
|
r22575 | $ hg clone https://localhost:$HGPORT/ copy-pull | ||
Augie Fackler
|
r23823 | abort: error: *certificate verify failed* (glob) | ||
Mads Kiilerich
|
r22575 | [255] | ||
Gregory Szorc
|
r29288 | #endif | ||
Mads Kiilerich
|
r22575 | |||
Gregory Szorc
|
r29334 | Specifying a per-host certificate file that doesn't exist will abort | ||
$ hg --config hostsecurity.localhost:verifycertsfile=/does/not/exist clone https://localhost:$HGPORT/ | ||||
abort: path specified by hostsecurity.localhost:verifycertsfile does not exist: /does/not/exist | ||||
[255] | ||||
A malformed per-host certificate file will raise an error | ||||
$ echo baddata > badca.pem | ||||
$ hg --config hostsecurity.localhost:verifycertsfile=badca.pem clone https://localhost:$HGPORT/ | ||||
Durham Goode
|
r29356 | abort: error: * (glob) | ||
Gregory Szorc
|
r29334 | [255] | ||
A per-host certificate mismatching the server will fail verification | ||||
$ hg --config hostsecurity.localhost:verifycertsfile="$CERTSDIR/client-cert.pem" clone https://localhost:$HGPORT/ | ||||
abort: error: *certificate verify failed* (glob) | ||||
[255] | ||||
A per-host certificate matching the server's cert will be accepted | ||||
$ hg --config hostsecurity.localhost:verifycertsfile="$CERTSDIR/pub.pem" clone -U https://localhost:$HGPORT/ perhostgood1 | ||||
requesting all changes | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 4 changes to 4 files | ||||
A per-host certificate with multiple certs and one matching will be accepted | ||||
$ cat "$CERTSDIR/client-cert.pem" "$CERTSDIR/pub.pem" > perhost.pem | ||||
$ hg --config hostsecurity.localhost:verifycertsfile=perhost.pem clone -U https://localhost:$HGPORT/ perhostgood2 | ||||
requesting all changes | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 4 changes to 4 files | ||||
Defining both per-host certificate and a fingerprint will print a warning | ||||
$ hg --config hostsecurity.localhost:verifycertsfile="$CERTSDIR/pub.pem" --config hostsecurity.localhost:fingerprints=sha1:914f1aff87249c09b6859b88b1906d30756491ca clone -U https://localhost:$HGPORT/ caandfingerwarning | ||||
(hostsecurity.localhost:verifycertsfile ignored when host fingerprints defined; using host fingerprints for verification) | ||||
requesting all changes | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 4 changes to 4 files | ||||
Gregory Szorc
|
r29288 | $ DISABLECACERTS="--config devel.disableloaddefaultcerts=true" | ||
Mads Kiilerich
|
r22575 | |||
Gregory Szorc
|
r29411 | Inability to verify peer certificate will result in abort | ||
Mads Kiilerich
|
r12740 | |||
Gregory Szorc
|
r29288 | $ hg clone https://localhost:$HGPORT/ copy-pull $DISABLECACERTS | ||
Gregory Szorc
|
r29411 | abort: unable to verify security of localhost (no loaded CA certificates); refusing to connect | ||
(see https://mercurial-scm.org/wiki/SecureConnections for how to configure Mercurial to avoid this error or set hostsecurity.localhost:fingerprints=sha256:62:09:97:2f:97:60:e3:65:8f:12:5d:78:9e:35:a1:36:7a:65:4b:0e:9f:ac:db:c3:bc:6e:b6:a3:c0:16:e0:30 to trust this server) | ||||
[255] | ||||
$ hg clone --insecure https://localhost:$HGPORT/ copy-pull | ||||
warning: connection security to localhost is disabled per current settings; communication is susceptible to eavesdropping and tampering | ||||
Mads Kiilerich
|
r12740 | requesting all changes | ||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 4 changes to 4 files | ||||
updating to branch default | ||||
4 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg verify -R copy-pull | ||||
checking changesets | ||||
checking manifests | ||||
crosschecking files in changesets and manifests | ||||
checking files | ||||
4 files, 1 changesets, 4 total revisions | ||||
$ cd test | ||||
$ echo bar > bar | ||||
$ hg commit -A -d '1 0' -m 2 | ||||
adding bar | ||||
$ cd .. | ||||
Mads Kiilerich
|
r13192 | pull without cacert | ||
Mads Kiilerich
|
r12740 | |||
$ cd copy-pull | ||||
$ echo '[hooks]' >> .hg/hgrc | ||||
Matt Mackall
|
r25478 | $ echo "changegroup = printenv.py changegroup" >> .hg/hgrc | ||
Gregory Szorc
|
r29288 | $ hg pull $DISABLECACERTS | ||
Thomas Arendsen Hein
|
r24138 | pulling from https://localhost:$HGPORT/ | ||
Gregory Szorc
|
r29411 | abort: unable to verify security of localhost (no loaded CA certificates); refusing to connect | ||
(see https://mercurial-scm.org/wiki/SecureConnections for how to configure Mercurial to avoid this error or set hostsecurity.localhost:fingerprints=sha256:62:09:97:2f:97:60:e3:65:8f:12:5d:78:9e:35:a1:36:7a:65:4b:0e:9f:ac:db:c3:bc:6e:b6:a3:c0:16:e0:30 to trust this server) | ||||
[255] | ||||
$ hg pull --insecure | ||||
pulling from https://localhost:$HGPORT/ | ||||
warning: connection security to localhost is disabled per current settings; communication is susceptible to eavesdropping and tampering | ||||
Mads Kiilerich
|
r12740 | searching for changes | ||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 1 changes to 1 files | ||||
Mateusz Kwapich
|
r27739 | changegroup hook: HG_NODE=5fed3813f7f5e1824344fdc9cf8f63bb662c292d HG_NODE_LAST=5fed3813f7f5e1824344fdc9cf8f63bb662c292d HG_SOURCE=pull HG_TXNID=TXN:* HG_URL=https://localhost:$HGPORT/ (glob) | ||
Mads Kiilerich
|
r12740 | (run 'hg update' to get a working copy) | ||
$ cd .. | ||||
Mads Kiilerich
|
r12741 | |||
Mads Kiilerich
|
r13192 | cacert configured in local repo | ||
Mads Kiilerich
|
r12741 | |||
Mads Kiilerich
|
r13192 | $ cp copy-pull/.hg/hgrc copy-pull/.hg/hgrc.bu | ||
$ echo "[web]" >> copy-pull/.hg/hgrc | ||||
Yuya Nishihara
|
r29331 | $ echo "cacerts=$CERTSDIR/pub.pem" >> copy-pull/.hg/hgrc | ||
Mads Kiilerich
|
r13192 | $ hg -R copy-pull pull --traceback | ||
Mads Kiilerich
|
r12741 | pulling from https://localhost:$HGPORT/ | ||
searching for changes | ||||
no changes found | ||||
Mads Kiilerich
|
r13192 | $ mv copy-pull/.hg/hgrc.bu copy-pull/.hg/hgrc | ||
Eduard-Cristian Stefan
|
r13231 | cacert configured globally, also testing expansion of environment | ||
variables in the filename | ||||
Mads Kiilerich
|
r13192 | |||
$ echo "[web]" >> $HGRCPATH | ||||
Eduard-Cristian Stefan
|
r13231 | $ echo 'cacerts=$P/pub.pem' >> $HGRCPATH | ||
Yuya Nishihara
|
r29331 | $ P="$CERTSDIR" hg -R copy-pull pull | ||
Mads Kiilerich
|
r13192 | pulling from https://localhost:$HGPORT/ | ||
searching for changes | ||||
no changes found | ||||
Yuya Nishihara
|
r29331 | $ P="$CERTSDIR" hg -R copy-pull pull --insecure | ||
Thomas Arendsen Hein
|
r24138 | pulling from https://localhost:$HGPORT/ | ||
Gregory Szorc
|
r29289 | warning: connection security to localhost is disabled per current settings; communication is susceptible to eavesdropping and tampering | ||
Yuya Nishihara
|
r13328 | searching for changes | ||
no changes found | ||||
Mads Kiilerich
|
r13192 | |||
cacert mismatch | ||||
Yuya Nishihara
|
r29331 | $ hg -R copy-pull pull --config web.cacerts="$CERTSDIR/pub.pem" \ | ||
> https://127.0.0.1:$HGPORT/ | ||||
Thomas Arendsen Hein
|
r24138 | pulling from https://127.0.0.1:$HGPORT/ | ||
Mads Kiilerich
|
r15814 | abort: 127.0.0.1 certificate error: certificate is for localhost | ||
Gregory Szorc
|
r29292 | (set hostsecurity.127.0.0.1:certfingerprints=sha256:62:09:97:2f:97:60:e3:65:8f:12:5d:78:9e:35:a1:36:7a:65:4b:0e:9f:ac:db:c3:bc:6e:b6:a3:c0:16:e0:30 config setting or use --insecure to connect insecurely) | ||
Mads Kiilerich
|
r12741 | [255] | ||
Yuya Nishihara
|
r29331 | $ hg -R copy-pull pull --config web.cacerts="$CERTSDIR/pub.pem" \ | ||
> https://127.0.0.1:$HGPORT/ --insecure | ||||
Thomas Arendsen Hein
|
r24138 | pulling from https://127.0.0.1:$HGPORT/ | ||
Gregory Szorc
|
r29289 | warning: connection security to 127.0.0.1 is disabled per current settings; communication is susceptible to eavesdropping and tampering | ||
Yuya Nishihara
|
r13328 | searching for changes | ||
no changes found | ||||
Yuya Nishihara
|
r29331 | $ hg -R copy-pull pull --config web.cacerts="$CERTSDIR/pub-other.pem" | ||
Thomas Arendsen Hein
|
r24138 | pulling from https://localhost:$HGPORT/ | ||
Augie Fackler
|
r23823 | abort: error: *certificate verify failed* (glob) | ||
Mads Kiilerich
|
r12741 | [255] | ||
Yuya Nishihara
|
r29331 | $ hg -R copy-pull pull --config web.cacerts="$CERTSDIR/pub-other.pem" \ | ||
> --insecure | ||||
Thomas Arendsen Hein
|
r24138 | pulling from https://localhost:$HGPORT/ | ||
Gregory Szorc
|
r29289 | warning: connection security to localhost is disabled per current settings; communication is susceptible to eavesdropping and tampering | ||
Yuya Nishihara
|
r13328 | searching for changes | ||
no changes found | ||||
Mads Kiilerich
|
r12741 | |||
Test server cert which isn't valid yet | ||||
Jun Wu
|
r28549 | $ hg serve -R test -p $HGPORT1 -d --pid-file=hg1.pid --certificate=server-not-yet.pem | ||
Mads Kiilerich
|
r12741 | $ cat hg1.pid >> $DAEMON_PIDS | ||
Yuya Nishihara
|
r29331 | $ hg -R copy-pull pull --config web.cacerts="$CERTSDIR/pub-not-yet.pem" \ | ||
> https://localhost:$HGPORT1/ | ||||
Thomas Arendsen Hein
|
r24138 | pulling from https://localhost:$HGPORT1/ | ||
Augie Fackler
|
r23823 | abort: error: *certificate verify failed* (glob) | ||
Mads Kiilerich
|
r12741 | [255] | ||
Test server cert which no longer is valid | ||||
Jun Wu
|
r28549 | $ hg serve -R test -p $HGPORT2 -d --pid-file=hg2.pid --certificate=server-expired.pem | ||
Mads Kiilerich
|
r12741 | $ cat hg2.pid >> $DAEMON_PIDS | ||
Yuya Nishihara
|
r29331 | $ hg -R copy-pull pull --config web.cacerts="$CERTSDIR/pub-expired.pem" \ | ||
> https://localhost:$HGPORT2/ | ||||
Thomas Arendsen Hein
|
r24138 | pulling from https://localhost:$HGPORT2/ | ||
Augie Fackler
|
r23823 | abort: error: *certificate verify failed* (glob) | ||
Mads Kiilerich
|
r12741 | [255] | ||
Mads Kiilerich
|
r13314 | |||
Fingerprints | ||||
Gregory Szorc
|
r29267 | - works without cacerts (hostkeyfingerprints) | ||
Gregory Szorc
|
r29263 | $ hg -R copy-pull id https://localhost:$HGPORT/ --insecure --config hostfingerprints.localhost=91:4f:1a:ff:87:24:9c:09:b6:85:9b:88:b1:90:6d:30:75:64:91:ca | ||
Mads Kiilerich
|
r13314 | 5fed3813f7f5 | ||
Gregory Szorc
|
r29267 | - works without cacerts (hostsecurity) | ||
$ hg -R copy-pull id https://localhost:$HGPORT/ --config hostsecurity.localhost:fingerprints=sha1:914f1aff87249c09b6859b88b1906d30756491ca | ||||
5fed3813f7f5 | ||||
$ hg -R copy-pull id https://localhost:$HGPORT/ --config hostsecurity.localhost:fingerprints=sha256:62:09:97:2f:97:60:e3:65:8f:12:5d:78:9e:35:a1:36:7a:65:4b:0e:9f:ac:db:c3:bc:6e:b6:a3:c0:16:e0:30 | ||||
5fed3813f7f5 | ||||
Gregory Szorc
|
r28525 | - multiple fingerprints specified and first matches | ||
Gregory Szorc
|
r28847 | $ hg --config 'hostfingerprints.localhost=914f1aff87249c09b6859b88b1906d30756491ca, deadbeefdeadbeefdeadbeefdeadbeefdeadbeef' -R copy-pull id https://localhost:$HGPORT/ --insecure | ||
Gregory Szorc
|
r28525 | 5fed3813f7f5 | ||
Gregory Szorc
|
r29267 | $ hg --config 'hostsecurity.localhost:fingerprints=sha1:914f1aff87249c09b6859b88b1906d30756491ca, sha1:deadbeefdeadbeefdeadbeefdeadbeefdeadbeef' -R copy-pull id https://localhost:$HGPORT/ | ||
5fed3813f7f5 | ||||
Gregory Szorc
|
r28525 | - multiple fingerprints specified and last matches | ||
Gregory Szorc
|
r28847 | $ hg --config 'hostfingerprints.localhost=deadbeefdeadbeefdeadbeefdeadbeefdeadbeef, 914f1aff87249c09b6859b88b1906d30756491ca' -R copy-pull id https://localhost:$HGPORT/ --insecure | ||
Gregory Szorc
|
r28525 | 5fed3813f7f5 | ||
Gregory Szorc
|
r29267 | $ hg --config 'hostsecurity.localhost:fingerprints=sha1:deadbeefdeadbeefdeadbeefdeadbeefdeadbeef, sha1:914f1aff87249c09b6859b88b1906d30756491ca' -R copy-pull id https://localhost:$HGPORT/ | ||
5fed3813f7f5 | ||||
Gregory Szorc
|
r28525 | - multiple fingerprints specified and none match | ||
Gregory Szorc
|
r28847 | $ hg --config 'hostfingerprints.localhost=deadbeefdeadbeefdeadbeefdeadbeefdeadbeef, aeadbeefdeadbeefdeadbeefdeadbeefdeadbeef' -R copy-pull id https://localhost:$HGPORT/ --insecure | ||
Gregory Szorc
|
r28525 | abort: certificate for localhost has unexpected fingerprint 91:4f:1a:ff:87:24:9c:09:b6:85:9b:88:b1:90:6d:30:75:64:91:ca | ||
(check hostfingerprint configuration) | ||||
[255] | ||||
Gregory Szorc
|
r29267 | $ hg --config 'hostsecurity.localhost:fingerprints=sha1:deadbeefdeadbeefdeadbeefdeadbeefdeadbeef, sha1:aeadbeefdeadbeefdeadbeefdeadbeefdeadbeef' -R copy-pull id https://localhost:$HGPORT/ | ||
Gregory Szorc
|
r29293 | abort: certificate for localhost has unexpected fingerprint sha1:91:4f:1a:ff:87:24:9c:09:b6:85:9b:88:b1:90:6d:30:75:64:91:ca | ||
Gregory Szorc
|
r29268 | (check hostsecurity configuration) | ||
Gregory Szorc
|
r29267 | [255] | ||
Mads Kiilerich
|
r13314 | - fails when cert doesn't match hostname (port is ignored) | ||
Gregory Szorc
|
r29263 | $ hg -R copy-pull id https://localhost:$HGPORT1/ --config hostfingerprints.localhost=914f1aff87249c09b6859b88b1906d30756491ca | ||
Matt Mackall
|
r15997 | abort: certificate for localhost has unexpected fingerprint 28:ff:71:bf:65:31:14:23:ad:62:92:b4:0e:31:99:18:fc:83:e3:9b | ||
(check hostfingerprint configuration) | ||||
Mads Kiilerich
|
r13314 | [255] | ||
Augie Fackler
|
r18588 | |||
Mads Kiilerich
|
r13314 | - ignores that certificate doesn't match hostname | ||
Gregory Szorc
|
r29263 | $ hg -R copy-pull id https://127.0.0.1:$HGPORT/ --config hostfingerprints.127.0.0.1=914f1aff87249c09b6859b88b1906d30756491ca | ||
Mads Kiilerich
|
r13314 | 5fed3813f7f5 | ||
Mads Kiilerich
|
r13423 | |||
Augie Fackler
|
r18588 | HGPORT1 is reused below for tinyproxy tests. Kill that server. | ||
Matt Mackall
|
r25472 | $ killdaemons.py hg1.pid | ||
Matt Mackall
|
r16300 | |||
Mads Kiilerich
|
r13423 | Prepare for connecting through proxy | ||
Matt Mackall
|
r25472 | $ tinyproxy.py $HGPORT1 localhost >proxy.log </dev/null 2>&1 & | ||
Mads Kiilerich
|
r16496 | $ while [ ! -f proxy.pid ]; do sleep 0; done | ||
Mads Kiilerich
|
r13423 | $ cat proxy.pid >> $DAEMON_PIDS | ||
$ echo "[http_proxy]" >> copy-pull/.hg/hgrc | ||||
$ echo "always=True" >> copy-pull/.hg/hgrc | ||||
$ echo "[hostfingerprints]" >> copy-pull/.hg/hgrc | ||||
$ echo "localhost =" >> copy-pull/.hg/hgrc | ||||
Test unvalidated https through proxy | ||||
$ http_proxy=http://localhost:$HGPORT1/ hg -R copy-pull pull --insecure --traceback | ||||
Thomas Arendsen Hein
|
r24138 | pulling from https://localhost:$HGPORT/ | ||
Gregory Szorc
|
r29289 | warning: connection security to localhost is disabled per current settings; communication is susceptible to eavesdropping and tampering | ||
Mads Kiilerich
|
r13423 | searching for changes | ||
no changes found | ||||
Test https with cacert and fingerprint through proxy | ||||
Yuya Nishihara
|
r29331 | $ http_proxy=http://localhost:$HGPORT1/ hg -R copy-pull pull \ | ||
> --config web.cacerts="$CERTSDIR/pub.pem" | ||||
Mads Kiilerich
|
r13423 | pulling from https://localhost:$HGPORT/ | ||
searching for changes | ||||
no changes found | ||||
Gregory Szorc
|
r29263 | $ http_proxy=http://localhost:$HGPORT1/ hg -R copy-pull pull https://127.0.0.1:$HGPORT/ --config hostfingerprints.127.0.0.1=914f1aff87249c09b6859b88b1906d30756491ca | ||
Mads Kiilerich
|
r13423 | pulling from https://127.0.0.1:$HGPORT/ | ||
searching for changes | ||||
no changes found | ||||
Test https with cert problems through proxy | ||||
Yuya Nishihara
|
r29331 | $ http_proxy=http://localhost:$HGPORT1/ hg -R copy-pull pull \ | ||
> --config web.cacerts="$CERTSDIR/pub-other.pem" | ||||
Thomas Arendsen Hein
|
r24138 | pulling from https://localhost:$HGPORT/ | ||
Augie Fackler
|
r23823 | abort: error: *certificate verify failed* (glob) | ||
Mads Kiilerich
|
r13424 | [255] | ||
Yuya Nishihara
|
r29331 | $ http_proxy=http://localhost:$HGPORT1/ hg -R copy-pull pull \ | ||
> --config web.cacerts="$CERTSDIR/pub-expired.pem" https://localhost:$HGPORT2/ | ||||
Thomas Arendsen Hein
|
r24138 | pulling from https://localhost:$HGPORT2/ | ||
Augie Fackler
|
r23823 | abort: error: *certificate verify failed* (glob) | ||
Mads Kiilerich
|
r13424 | [255] | ||
Yuya Nishihara
|
r25413 | |||
Matt Mackall
|
r25472 | $ killdaemons.py hg0.pid | ||
Yuya Nishihara
|
r25413 | |||
#if sslcontext | ||||
Start patched hgweb that requires client certificates: | ||||
$ cat << EOT > reqclientcert.py | ||||
> import ssl | ||||
> from mercurial.hgweb import server | ||||
> class _httprequesthandlersslclientcert(server._httprequesthandlerssl): | ||||
> @staticmethod | ||||
> def preparehttpserver(httpserver, ssl_cert): | ||||
> sslcontext = ssl.SSLContext(ssl.PROTOCOL_TLSv1) | ||||
> sslcontext.verify_mode = ssl.CERT_REQUIRED | ||||
> sslcontext.load_cert_chain(ssl_cert) | ||||
> # verify clients by server certificate | ||||
> sslcontext.load_verify_locations(ssl_cert) | ||||
> httpserver.socket = sslcontext.wrap_socket(httpserver.socket, | ||||
> server_side=True) | ||||
> server._httprequesthandlerssl = _httprequesthandlersslclientcert | ||||
> EOT | ||||
$ cd test | ||||
$ hg serve -p $HGPORT -d --pid-file=../hg0.pid --certificate=$PRIV \ | ||||
> --config extensions.reqclientcert=../reqclientcert.py | ||||
$ cat ../hg0.pid >> $DAEMON_PIDS | ||||
$ cd .. | ||||
without client certificate: | ||||
Yuya Nishihara
|
r29331 | $ P="$CERTSDIR" hg id https://localhost:$HGPORT/ | ||
Yuya Nishihara
|
r25413 | abort: error: *handshake failure* (glob) | ||
[255] | ||||
with client certificate: | ||||
$ cat << EOT >> $HGRCPATH | ||||
> [auth] | ||||
> l.prefix = localhost | ||||
Yuya Nishihara
|
r29331 | > l.cert = $CERTSDIR/client-cert.pem | ||
> l.key = $CERTSDIR/client-key.pem | ||||
Yuya Nishihara
|
r25413 | > EOT | ||
Yuya Nishihara
|
r29331 | $ P="$CERTSDIR" hg id https://localhost:$HGPORT/ \ | ||
> --config auth.l.key="$CERTSDIR/client-key-decrypted.pem" | ||||
Yuya Nishihara
|
r25413 | 5fed3813f7f5 | ||
Yuya Nishihara
|
r29331 | $ printf '1234\n' | env P="$CERTSDIR" hg id https://localhost:$HGPORT/ \ | ||
Yuya Nishihara
|
r25415 | > --config ui.interactive=True --config ui.nontty=True | ||
Yuya Nishihara
|
r29331 | passphrase for */client-key.pem: 5fed3813f7f5 (glob) | ||
Yuya Nishihara
|
r25415 | |||
Yuya Nishihara
|
r29331 | $ env P="$CERTSDIR" hg id https://localhost:$HGPORT/ | ||
Yuya Nishihara
|
r25415 | abort: error: * (glob) | ||
[255] | ||||
Yuya Nishihara
|
r25413 | #endif | ||