##// END OF EJS Templates
tests: fix missing (glob) annotations in test-https.t
Augie Fackler -
r31813:68bd8cd3 default
parent child Browse files
Show More
@@ -1,645 +1,645 b''
1 1 #require serve ssl
2 2
3 3 Proper https client requires the built-in ssl from Python 2.6.
4 4
5 5 Make server certificates:
6 6
7 7 $ CERTSDIR="$TESTDIR/sslcerts"
8 8 $ cat "$CERTSDIR/priv.pem" "$CERTSDIR/pub.pem" >> server.pem
9 9 $ PRIV=`pwd`/server.pem
10 10 $ cat "$CERTSDIR/priv.pem" "$CERTSDIR/pub-not-yet.pem" > server-not-yet.pem
11 11 $ cat "$CERTSDIR/priv.pem" "$CERTSDIR/pub-expired.pem" > server-expired.pem
12 12
13 13 $ hg init test
14 14 $ cd test
15 15 $ echo foo>foo
16 16 $ mkdir foo.d foo.d/bAr.hg.d foo.d/baR.d.hg
17 17 $ echo foo>foo.d/foo
18 18 $ echo bar>foo.d/bAr.hg.d/BaR
19 19 $ echo bar>foo.d/baR.d.hg/bAR
20 20 $ hg commit -A -m 1
21 21 adding foo
22 22 adding foo.d/bAr.hg.d/BaR
23 23 adding foo.d/baR.d.hg/bAR
24 24 adding foo.d/foo
25 25 $ hg serve -p $HGPORT -d --pid-file=../hg0.pid --certificate=$PRIV
26 26 $ cat ../hg0.pid >> $DAEMON_PIDS
27 27
28 28 cacert not found
29 29
30 30 $ hg in --config web.cacerts=no-such.pem https://localhost:$HGPORT/
31 31 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
32 32 abort: could not find web.cacerts: no-such.pem
33 33 [255]
34 34
35 35 Test server address cannot be reused
36 36
37 37 #if windows
38 38 $ hg serve -p $HGPORT --certificate=$PRIV 2>&1
39 39 abort: cannot start server at 'localhost:$HGPORT': * (glob)
40 40 [255]
41 41 #else
42 42 $ hg serve -p $HGPORT --certificate=$PRIV 2>&1
43 43 abort: cannot start server at 'localhost:$HGPORT': Address already in use
44 44 [255]
45 45 #endif
46 46 $ cd ..
47 47
48 48 Our test cert is not signed by a trusted CA. It should fail to verify if
49 49 we are able to load CA certs.
50 50
51 51 #if sslcontext defaultcacerts no-defaultcacertsloaded
52 52 $ hg clone https://localhost:$HGPORT/ copy-pull
53 53 (an attempt was made to load CA certificates but none were loaded; see https://mercurial-scm.org/wiki/SecureConnections for how to configure Mercurial to avoid this error)
54 54 abort: error: *certificate verify failed* (glob)
55 55 [255]
56 56 #endif
57 57
58 58 #if no-sslcontext defaultcacerts
59 59 $ hg clone https://localhost:$HGPORT/ copy-pull
60 60 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
61 61 (using CA certificates from *; if you see this message, your Mercurial install is not properly configured; see https://mercurial-scm.org/wiki/SecureConnections for how to configure Mercurial to avoid this message) (glob) (?)
62 62 abort: error: *certificate verify failed* (glob)
63 63 [255]
64 64 #endif
65 65
66 66 #if no-sslcontext windows
67 67 $ hg clone https://localhost:$HGPORT/ copy-pull
68 68 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info
69 69 (unable to load Windows CA certificates; see https://mercurial-scm.org/wiki/SecureConnections for how to configure Mercurial to avoid this message)
70 70 abort: error: *certificate verify failed* (glob)
71 71 [255]
72 72 #endif
73 73
74 74 #if no-sslcontext osx
75 75 $ hg clone https://localhost:$HGPORT/ copy-pull
76 76 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info
77 77 (unable to load CA certificates; see https://mercurial-scm.org/wiki/SecureConnections for how to configure Mercurial to avoid this message)
78 78 abort: localhost certificate error: no certificate received
79 79 (set hostsecurity.localhost:certfingerprints=sha256:20:de:b3:ad:b4:cd:a5:42:f0:74:41:1c:a2:70:1e:da:6e:c0:5c:16:9e:e7:22:0f:f1:b7:e5:6e:e4:92:af:7e config setting or use --insecure to connect insecurely)
80 80 [255]
81 81 #endif
82 82
83 83 #if defaultcacertsloaded
84 84 $ hg clone https://localhost:$HGPORT/ copy-pull
85 85 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
86 86 (using CA certificates from *; if you see this message, your Mercurial install is not properly configured; see https://mercurial-scm.org/wiki/SecureConnections for how to configure Mercurial to avoid this message) (glob) (?)
87 87 abort: error: *certificate verify failed* (glob)
88 88 [255]
89 89 #endif
90 90
91 91 #if no-defaultcacerts
92 92 $ hg clone https://localhost:$HGPORT/ copy-pull
93 93 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
94 94 (unable to load * certificates; see https://mercurial-scm.org/wiki/SecureConnections for how to configure Mercurial to avoid this message) (glob) (?)
95 95 abort: localhost certificate error: no certificate received
96 96 (set hostsecurity.localhost:certfingerprints=sha256:20:de:b3:ad:b4:cd:a5:42:f0:74:41:1c:a2:70:1e:da:6e:c0:5c:16:9e:e7:22:0f:f1:b7:e5:6e:e4:92:af:7e config setting or use --insecure to connect insecurely)
97 97 [255]
98 98 #endif
99 99
100 100 Specifying a per-host certificate file that doesn't exist will abort. The full
101 101 C:/path/to/msysroot will print on Windows.
102 102
103 103 $ hg --config hostsecurity.localhost:verifycertsfile=/does/not/exist clone https://localhost:$HGPORT/
104 104 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
105 105 abort: path specified by hostsecurity.localhost:verifycertsfile does not exist: */does/not/exist (glob)
106 106 [255]
107 107
108 108 A malformed per-host certificate file will raise an error
109 109
110 110 $ echo baddata > badca.pem
111 111 #if sslcontext
112 112 $ hg --config hostsecurity.localhost:verifycertsfile=badca.pem clone https://localhost:$HGPORT/
113 113 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
114 114 abort: error loading CA file badca.pem: * (glob)
115 115 (file is empty or malformed?)
116 116 [255]
117 117 #else
118 118 $ hg --config hostsecurity.localhost:verifycertsfile=badca.pem clone https://localhost:$HGPORT/
119 119 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
120 120 abort: error: * (glob)
121 121 [255]
122 122 #endif
123 123
124 124 A per-host certificate mismatching the server will fail verification
125 125
126 126 (modern ssl is able to discern whether the loaded cert is a CA cert)
127 127 #if sslcontext
128 128 $ hg --config hostsecurity.localhost:verifycertsfile="$CERTSDIR/client-cert.pem" clone https://localhost:$HGPORT/
129 129 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
130 130 (an attempt was made to load CA certificates but none were loaded; see https://mercurial-scm.org/wiki/SecureConnections for how to configure Mercurial to avoid this error)
131 131 abort: error: *certificate verify failed* (glob)
132 132 [255]
133 133 #else
134 134 $ hg --config hostsecurity.localhost:verifycertsfile="$CERTSDIR/client-cert.pem" clone https://localhost:$HGPORT/
135 135 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
136 136 abort: error: *certificate verify failed* (glob)
137 137 [255]
138 138 #endif
139 139
140 140 A per-host certificate matching the server's cert will be accepted
141 141
142 142 $ hg --config hostsecurity.localhost:verifycertsfile="$CERTSDIR/pub.pem" clone -U https://localhost:$HGPORT/ perhostgood1
143 143 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
144 144 requesting all changes
145 145 adding changesets
146 146 adding manifests
147 147 adding file changes
148 148 added 1 changesets with 4 changes to 4 files
149 149
150 150 A per-host certificate with multiple certs and one matching will be accepted
151 151
152 152 $ cat "$CERTSDIR/client-cert.pem" "$CERTSDIR/pub.pem" > perhost.pem
153 153 $ hg --config hostsecurity.localhost:verifycertsfile=perhost.pem clone -U https://localhost:$HGPORT/ perhostgood2
154 154 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
155 155 requesting all changes
156 156 adding changesets
157 157 adding manifests
158 158 adding file changes
159 159 added 1 changesets with 4 changes to 4 files
160 160
161 161 Defining both per-host certificate and a fingerprint will print a warning
162 162
163 163 $ hg --config hostsecurity.localhost:verifycertsfile="$CERTSDIR/pub.pem" --config hostsecurity.localhost:fingerprints=sha1:ecd87cd6b386d04fc1b8b41c9d8f5e168eef1c03 clone -U https://localhost:$HGPORT/ caandfingerwarning
164 164 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
165 165 (hostsecurity.localhost:verifycertsfile ignored when host fingerprints defined; using host fingerprints for verification)
166 166 requesting all changes
167 167 adding changesets
168 168 adding manifests
169 169 adding file changes
170 170 added 1 changesets with 4 changes to 4 files
171 171
172 172 $ DISABLECACERTS="--config devel.disableloaddefaultcerts=true"
173 173
174 174 Inability to verify peer certificate will result in abort
175 175
176 176 $ hg clone https://localhost:$HGPORT/ copy-pull $DISABLECACERTS
177 177 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
178 178 abort: unable to verify security of localhost (no loaded CA certificates); refusing to connect
179 179 (see https://mercurial-scm.org/wiki/SecureConnections for how to configure Mercurial to avoid this error or set hostsecurity.localhost:fingerprints=sha256:20:de:b3:ad:b4:cd:a5:42:f0:74:41:1c:a2:70:1e:da:6e:c0:5c:16:9e:e7:22:0f:f1:b7:e5:6e:e4:92:af:7e to trust this server)
180 180 [255]
181 181
182 182 $ hg clone --insecure https://localhost:$HGPORT/ copy-pull
183 183 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
184 184 warning: connection security to localhost is disabled per current settings; communication is susceptible to eavesdropping and tampering
185 185 requesting all changes
186 186 adding changesets
187 187 adding manifests
188 188 adding file changes
189 189 added 1 changesets with 4 changes to 4 files
190 190 updating to branch default
191 191 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
192 192 $ hg verify -R copy-pull
193 193 checking changesets
194 194 checking manifests
195 195 crosschecking files in changesets and manifests
196 196 checking files
197 197 4 files, 1 changesets, 4 total revisions
198 198 $ cd test
199 199 $ echo bar > bar
200 200 $ hg commit -A -d '1 0' -m 2
201 201 adding bar
202 202 $ cd ..
203 203
204 204 pull without cacert
205 205
206 206 $ cd copy-pull
207 207 $ cat >> .hg/hgrc <<EOF
208 208 > [hooks]
209 209 > changegroup = sh -c "printenv.py changegroup"
210 210 > EOF
211 211 $ hg pull $DISABLECACERTS
212 212 pulling from https://localhost:$HGPORT/
213 213 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
214 214 abort: unable to verify security of localhost (no loaded CA certificates); refusing to connect
215 215 (see https://mercurial-scm.org/wiki/SecureConnections for how to configure Mercurial to avoid this error or set hostsecurity.localhost:fingerprints=sha256:20:de:b3:ad:b4:cd:a5:42:f0:74:41:1c:a2:70:1e:da:6e:c0:5c:16:9e:e7:22:0f:f1:b7:e5:6e:e4:92:af:7e to trust this server)
216 216 [255]
217 217
218 218 $ hg pull --insecure
219 219 pulling from https://localhost:$HGPORT/
220 220 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
221 221 warning: connection security to localhost is disabled per current settings; communication is susceptible to eavesdropping and tampering
222 222 searching for changes
223 223 adding changesets
224 224 adding manifests
225 225 adding file changes
226 226 added 1 changesets with 1 changes to 1 files
227 227 changegroup hook: HG_HOOKNAME=changegroup HG_HOOKTYPE=changegroup HG_NODE=5fed3813f7f5e1824344fdc9cf8f63bb662c292d HG_NODE_LAST=5fed3813f7f5e1824344fdc9cf8f63bb662c292d HG_SOURCE=pull HG_TXNID=TXN:$ID$ HG_URL=https://localhost:$HGPORT/
228 228 (run 'hg update' to get a working copy)
229 229 $ cd ..
230 230
231 231 cacert configured in local repo
232 232
233 233 $ cp copy-pull/.hg/hgrc copy-pull/.hg/hgrc.bu
234 234 $ echo "[web]" >> copy-pull/.hg/hgrc
235 235 $ echo "cacerts=$CERTSDIR/pub.pem" >> copy-pull/.hg/hgrc
236 236 $ hg -R copy-pull pull
237 237 pulling from https://localhost:$HGPORT/
238 238 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
239 239 searching for changes
240 240 no changes found
241 241 $ mv copy-pull/.hg/hgrc.bu copy-pull/.hg/hgrc
242 242
243 243 cacert configured globally, also testing expansion of environment
244 244 variables in the filename
245 245
246 246 $ echo "[web]" >> $HGRCPATH
247 247 $ echo 'cacerts=$P/pub.pem' >> $HGRCPATH
248 248 $ P="$CERTSDIR" hg -R copy-pull pull
249 249 pulling from https://localhost:$HGPORT/
250 250 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
251 251 searching for changes
252 252 no changes found
253 253 $ P="$CERTSDIR" hg -R copy-pull pull --insecure
254 254 pulling from https://localhost:$HGPORT/
255 255 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
256 256 warning: connection security to localhost is disabled per current settings; communication is susceptible to eavesdropping and tampering
257 257 searching for changes
258 258 no changes found
259 259
260 260 empty cacert file
261 261
262 262 $ touch emptycafile
263 263
264 264 #if sslcontext
265 265 $ hg --config web.cacerts=emptycafile -R copy-pull pull
266 266 pulling from https://localhost:$HGPORT/
267 267 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
268 268 abort: error loading CA file emptycafile: * (glob)
269 269 (file is empty or malformed?)
270 270 [255]
271 271 #else
272 272 $ hg --config web.cacerts=emptycafile -R copy-pull pull
273 273 pulling from https://localhost:$HGPORT/
274 274 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
275 275 abort: error: * (glob)
276 276 [255]
277 277 #endif
278 278
279 279 cacert mismatch
280 280
281 281 $ hg -R copy-pull pull --config web.cacerts="$CERTSDIR/pub.pem" \
282 282 > https://$LOCALIP:$HGPORT/
283 283 pulling from https://*:$HGPORT/ (glob)
284 284 warning: connecting to $LOCALIP using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
285 abort: $LOCALIP certificate error: certificate is for localhost
285 abort: $LOCALIP certificate error: certificate is for localhost (glob)
286 286 (set hostsecurity.$LOCALIP:certfingerprints=sha256:20:de:b3:ad:b4:cd:a5:42:f0:74:41:1c:a2:70:1e:da:6e:c0:5c:16:9e:e7:22:0f:f1:b7:e5:6e:e4:92:af:7e config setting or use --insecure to connect insecurely)
287 287 [255]
288 288 $ hg -R copy-pull pull --config web.cacerts="$CERTSDIR/pub.pem" \
289 289 > https://$LOCALIP:$HGPORT/ --insecure
290 290 pulling from https://*:$HGPORT/ (glob)
291 291 warning: connecting to $LOCALIP using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
292 warning: connection security to $LOCALIP is disabled per current settings; communication is susceptible to eavesdropping and tampering
292 warning: connection security to $LOCALIP is disabled per current settings; communication is susceptible to eavesdropping and tampering (glob)
293 293 searching for changes
294 294 no changes found
295 295 $ hg -R copy-pull pull --config web.cacerts="$CERTSDIR/pub-other.pem"
296 296 pulling from https://localhost:$HGPORT/
297 297 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
298 298 abort: error: *certificate verify failed* (glob)
299 299 [255]
300 300 $ hg -R copy-pull pull --config web.cacerts="$CERTSDIR/pub-other.pem" \
301 301 > --insecure
302 302 pulling from https://localhost:$HGPORT/
303 303 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
304 304 warning: connection security to localhost is disabled per current settings; communication is susceptible to eavesdropping and tampering
305 305 searching for changes
306 306 no changes found
307 307
308 308 Test server cert which isn't valid yet
309 309
310 310 $ hg serve -R test -p $HGPORT1 -d --pid-file=hg1.pid --certificate=server-not-yet.pem
311 311 $ cat hg1.pid >> $DAEMON_PIDS
312 312 $ hg -R copy-pull pull --config web.cacerts="$CERTSDIR/pub-not-yet.pem" \
313 313 > https://localhost:$HGPORT1/
314 314 pulling from https://localhost:$HGPORT1/
315 315 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
316 316 abort: error: *certificate verify failed* (glob)
317 317 [255]
318 318
319 319 Test server cert which no longer is valid
320 320
321 321 $ hg serve -R test -p $HGPORT2 -d --pid-file=hg2.pid --certificate=server-expired.pem
322 322 $ cat hg2.pid >> $DAEMON_PIDS
323 323 $ hg -R copy-pull pull --config web.cacerts="$CERTSDIR/pub-expired.pem" \
324 324 > https://localhost:$HGPORT2/
325 325 pulling from https://localhost:$HGPORT2/
326 326 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
327 327 abort: error: *certificate verify failed* (glob)
328 328 [255]
329 329
330 330 Disabling the TLS 1.0 warning works
331 331 $ hg -R copy-pull id https://localhost:$HGPORT/ \
332 332 > --config hostsecurity.localhost:fingerprints=sha1:ecd87cd6b386d04fc1b8b41c9d8f5e168eef1c03 \
333 333 > --config hostsecurity.disabletls10warning=true
334 334 5fed3813f7f5
335 335
336 336 #if no-sslcontext no-py27+
337 337 Setting ciphers doesn't work in Python 2.6
338 338 $ P="$CERTSDIR" hg --config hostsecurity.ciphers=HIGH -R copy-pull id https://localhost:$HGPORT/
339 339 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info
340 340 abort: setting ciphers in [hostsecurity] is not supported by this version of Python
341 341 (remove the config option or run Mercurial with a modern Python version (preferred))
342 342 [255]
343 343 #endif
344 344
345 345 Setting ciphers works in Python 2.7+ but the error message is different on
346 346 legacy ssl. We test legacy once and do more feature checking on modern
347 347 configs.
348 348
349 349 #if py27+ no-sslcontext
350 350 $ P="$CERTSDIR" hg --config hostsecurity.ciphers=invalid -R copy-pull id https://localhost:$HGPORT/
351 351 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info
352 352 abort: *No cipher can be selected. (glob)
353 353 [255]
354 354
355 355 $ P="$CERTSDIR" hg --config hostsecurity.ciphers=HIGH -R copy-pull id https://localhost:$HGPORT/
356 356 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info
357 357 5fed3813f7f5
358 358 #endif
359 359
360 360 #if sslcontext
361 361 Setting ciphers to an invalid value aborts
362 362 $ P="$CERTSDIR" hg --config hostsecurity.ciphers=invalid -R copy-pull id https://localhost:$HGPORT/
363 363 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
364 364 abort: could not set ciphers: No cipher can be selected.
365 365 (change cipher string (invalid) in config)
366 366 [255]
367 367
368 368 $ P="$CERTSDIR" hg --config hostsecurity.localhost:ciphers=invalid -R copy-pull id https://localhost:$HGPORT/
369 369 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
370 370 abort: could not set ciphers: No cipher can be selected.
371 371 (change cipher string (invalid) in config)
372 372 [255]
373 373
374 374 Changing the cipher string works
375 375
376 376 $ P="$CERTSDIR" hg --config hostsecurity.ciphers=HIGH -R copy-pull id https://localhost:$HGPORT/
377 377 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
378 378 5fed3813f7f5
379 379 #endif
380 380
381 381 Fingerprints
382 382
383 383 - works without cacerts (hostfingerprints)
384 384 $ hg -R copy-pull id https://localhost:$HGPORT/ --insecure --config hostfingerprints.localhost=ec:d8:7c:d6:b3:86:d0:4f:c1:b8:b4:1c:9d:8f:5e:16:8e:ef:1c:03
385 385 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
386 386 (SHA-1 fingerprint for localhost found in legacy [hostfingerprints] section; if you trust this fingerprint, set the following config value in [hostsecurity] and remove the old one from [hostfingerprints] to upgrade to a more secure SHA-256 fingerprint: localhost.fingerprints=sha256:20:de:b3:ad:b4:cd:a5:42:f0:74:41:1c:a2:70:1e:da:6e:c0:5c:16:9e:e7:22:0f:f1:b7:e5:6e:e4:92:af:7e)
387 387 5fed3813f7f5
388 388
389 389 - works without cacerts (hostsecurity)
390 390 $ hg -R copy-pull id https://localhost:$HGPORT/ --config hostsecurity.localhost:fingerprints=sha1:ecd87cd6b386d04fc1b8b41c9d8f5e168eef1c03
391 391 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
392 392 5fed3813f7f5
393 393
394 394 $ hg -R copy-pull id https://localhost:$HGPORT/ --config hostsecurity.localhost:fingerprints=sha256:20:de:b3:ad:b4:cd:a5:42:f0:74:41:1c:a2:70:1e:da:6e:c0:5c:16:9e:e7:22:0f:f1:b7:e5:6e:e4:92:af:7e
395 395 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
396 396 5fed3813f7f5
397 397
398 398 - multiple fingerprints specified and first matches
399 399 $ hg --config 'hostfingerprints.localhost=ecd87cd6b386d04fc1b8b41c9d8f5e168eef1c03, deadbeefdeadbeefdeadbeefdeadbeefdeadbeef' -R copy-pull id https://localhost:$HGPORT/ --insecure
400 400 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
401 401 (SHA-1 fingerprint for localhost found in legacy [hostfingerprints] section; if you trust this fingerprint, set the following config value in [hostsecurity] and remove the old one from [hostfingerprints] to upgrade to a more secure SHA-256 fingerprint: localhost.fingerprints=sha256:20:de:b3:ad:b4:cd:a5:42:f0:74:41:1c:a2:70:1e:da:6e:c0:5c:16:9e:e7:22:0f:f1:b7:e5:6e:e4:92:af:7e)
402 402 5fed3813f7f5
403 403
404 404 $ hg --config 'hostsecurity.localhost:fingerprints=sha1:ecd87cd6b386d04fc1b8b41c9d8f5e168eef1c03, sha1:deadbeefdeadbeefdeadbeefdeadbeefdeadbeef' -R copy-pull id https://localhost:$HGPORT/
405 405 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
406 406 5fed3813f7f5
407 407
408 408 - multiple fingerprints specified and last matches
409 409 $ hg --config 'hostfingerprints.localhost=deadbeefdeadbeefdeadbeefdeadbeefdeadbeef, ecd87cd6b386d04fc1b8b41c9d8f5e168eef1c03' -R copy-pull id https://localhost:$HGPORT/ --insecure
410 410 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
411 411 (SHA-1 fingerprint for localhost found in legacy [hostfingerprints] section; if you trust this fingerprint, set the following config value in [hostsecurity] and remove the old one from [hostfingerprints] to upgrade to a more secure SHA-256 fingerprint: localhost.fingerprints=sha256:20:de:b3:ad:b4:cd:a5:42:f0:74:41:1c:a2:70:1e:da:6e:c0:5c:16:9e:e7:22:0f:f1:b7:e5:6e:e4:92:af:7e)
412 412 5fed3813f7f5
413 413
414 414 $ hg --config 'hostsecurity.localhost:fingerprints=sha1:deadbeefdeadbeefdeadbeefdeadbeefdeadbeef, sha1:ecd87cd6b386d04fc1b8b41c9d8f5e168eef1c03' -R copy-pull id https://localhost:$HGPORT/
415 415 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
416 416 5fed3813f7f5
417 417
418 418 - multiple fingerprints specified and none match
419 419
420 420 $ hg --config 'hostfingerprints.localhost=deadbeefdeadbeefdeadbeefdeadbeefdeadbeef, aeadbeefdeadbeefdeadbeefdeadbeefdeadbeef' -R copy-pull id https://localhost:$HGPORT/ --insecure
421 421 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
422 422 abort: certificate for localhost has unexpected fingerprint ec:d8:7c:d6:b3:86:d0:4f:c1:b8:b4:1c:9d:8f:5e:16:8e:ef:1c:03
423 423 (check hostfingerprint configuration)
424 424 [255]
425 425
426 426 $ hg --config 'hostsecurity.localhost:fingerprints=sha1:deadbeefdeadbeefdeadbeefdeadbeefdeadbeef, sha1:aeadbeefdeadbeefdeadbeefdeadbeefdeadbeef' -R copy-pull id https://localhost:$HGPORT/
427 427 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
428 428 abort: certificate for localhost has unexpected fingerprint sha1:ec:d8:7c:d6:b3:86:d0:4f:c1:b8:b4:1c:9d:8f:5e:16:8e:ef:1c:03
429 429 (check hostsecurity configuration)
430 430 [255]
431 431
432 432 - fails when cert doesn't match hostname (port is ignored)
433 433 $ hg -R copy-pull id https://localhost:$HGPORT1/ --config hostfingerprints.localhost=ecd87cd6b386d04fc1b8b41c9d8f5e168eef1c03
434 434 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
435 435 abort: certificate for localhost has unexpected fingerprint f4:2f:5a:0c:3e:52:5b:db:e7:24:a8:32:1d:18:97:6d:69:b5:87:84
436 436 (check hostfingerprint configuration)
437 437 [255]
438 438
439 439
440 440 - ignores that certificate doesn't match hostname
441 441 $ hg -R copy-pull id https://$LOCALIP:$HGPORT/ --config hostfingerprints.$LOCALIP=ecd87cd6b386d04fc1b8b41c9d8f5e168eef1c03
442 442 warning: connecting to $LOCALIP using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
443 443 (SHA-1 fingerprint for $LOCALIP found in legacy [hostfingerprints] section; if you trust this fingerprint, set the following config value in [hostsecurity] and remove the old one from [hostfingerprints] to upgrade to a more secure SHA-256 fingerprint: $LOCALIP.fingerprints=sha256:20:de:b3:ad:b4:cd:a5:42:f0:74:41:1c:a2:70:1e:da:6e:c0:5c:16:9e:e7:22:0f:f1:b7:e5:6e:e4:92:af:7e)
444 444 5fed3813f7f5
445 445
446 446 Ports used by next test. Kill servers.
447 447
448 448 $ killdaemons.py hg0.pid
449 449 $ killdaemons.py hg1.pid
450 450 $ killdaemons.py hg2.pid
451 451
452 452 #if sslcontext tls1.2
453 453 Start servers running supported TLS versions
454 454
455 455 $ cd test
456 456 $ hg serve -p $HGPORT -d --pid-file=../hg0.pid --certificate=$PRIV \
457 457 > --config devel.serverexactprotocol=tls1.0
458 458 $ cat ../hg0.pid >> $DAEMON_PIDS
459 459 $ hg serve -p $HGPORT1 -d --pid-file=../hg1.pid --certificate=$PRIV \
460 460 > --config devel.serverexactprotocol=tls1.1
461 461 $ cat ../hg1.pid >> $DAEMON_PIDS
462 462 $ hg serve -p $HGPORT2 -d --pid-file=../hg2.pid --certificate=$PRIV \
463 463 > --config devel.serverexactprotocol=tls1.2
464 464 $ cat ../hg2.pid >> $DAEMON_PIDS
465 465 $ cd ..
466 466
467 467 Clients talking same TLS versions work
468 468
469 469 $ P="$CERTSDIR" hg --config hostsecurity.minimumprotocol=tls1.0 id https://localhost:$HGPORT/
470 470 5fed3813f7f5
471 471 $ P="$CERTSDIR" hg --config hostsecurity.minimumprotocol=tls1.1 id https://localhost:$HGPORT1/
472 472 5fed3813f7f5
473 473 $ P="$CERTSDIR" hg --config hostsecurity.minimumprotocol=tls1.2 id https://localhost:$HGPORT2/
474 474 5fed3813f7f5
475 475
476 476 Clients requiring newer TLS version than what server supports fail
477 477
478 478 $ P="$CERTSDIR" hg id https://localhost:$HGPORT/
479 479 (could not negotiate a common security protocol (tls1.1+) with localhost; the likely cause is Mercurial is configured to be more secure than the server can support)
480 480 (consider contacting the operator of this server and ask them to support modern TLS protocol versions; or, set hostsecurity.localhost:minimumprotocol=tls1.0 to allow use of legacy, less secure protocols when communicating with this server)
481 481 (see https://mercurial-scm.org/wiki/SecureConnections for more info)
482 482 abort: error: *unsupported protocol* (glob)
483 483 [255]
484 484
485 485 $ P="$CERTSDIR" hg --config hostsecurity.minimumprotocol=tls1.1 id https://localhost:$HGPORT/
486 486 (could not negotiate a common security protocol (tls1.1+) with localhost; the likely cause is Mercurial is configured to be more secure than the server can support)
487 487 (consider contacting the operator of this server and ask them to support modern TLS protocol versions; or, set hostsecurity.localhost:minimumprotocol=tls1.0 to allow use of legacy, less secure protocols when communicating with this server)
488 488 (see https://mercurial-scm.org/wiki/SecureConnections for more info)
489 489 abort: error: *unsupported protocol* (glob)
490 490 [255]
491 491 $ P="$CERTSDIR" hg --config hostsecurity.minimumprotocol=tls1.2 id https://localhost:$HGPORT/
492 492 (could not negotiate a common security protocol (tls1.2+) with localhost; the likely cause is Mercurial is configured to be more secure than the server can support)
493 493 (consider contacting the operator of this server and ask them to support modern TLS protocol versions; or, set hostsecurity.localhost:minimumprotocol=tls1.0 to allow use of legacy, less secure protocols when communicating with this server)
494 494 (see https://mercurial-scm.org/wiki/SecureConnections for more info)
495 495 abort: error: *unsupported protocol* (glob)
496 496 [255]
497 497 $ P="$CERTSDIR" hg --config hostsecurity.minimumprotocol=tls1.2 id https://localhost:$HGPORT1/
498 498 (could not negotiate a common security protocol (tls1.2+) with localhost; the likely cause is Mercurial is configured to be more secure than the server can support)
499 499 (consider contacting the operator of this server and ask them to support modern TLS protocol versions; or, set hostsecurity.localhost:minimumprotocol=tls1.0 to allow use of legacy, less secure protocols when communicating with this server)
500 500 (see https://mercurial-scm.org/wiki/SecureConnections for more info)
501 501 abort: error: *unsupported protocol* (glob)
502 502 [255]
503 503
504 504 --insecure will allow TLS 1.0 connections and override configs
505 505
506 506 $ hg --config hostsecurity.minimumprotocol=tls1.2 id --insecure https://localhost:$HGPORT1/
507 507 warning: connection security to localhost is disabled per current settings; communication is susceptible to eavesdropping and tampering
508 508 5fed3813f7f5
509 509
510 510 The per-host config option overrides the default
511 511
512 512 $ P="$CERTSDIR" hg id https://localhost:$HGPORT/ \
513 513 > --config hostsecurity.minimumprotocol=tls1.2 \
514 514 > --config hostsecurity.localhost:minimumprotocol=tls1.0
515 515 5fed3813f7f5
516 516
517 517 The per-host config option by itself works
518 518
519 519 $ P="$CERTSDIR" hg id https://localhost:$HGPORT/ \
520 520 > --config hostsecurity.localhost:minimumprotocol=tls1.2
521 521 (could not negotiate a common security protocol (tls1.2+) with localhost; the likely cause is Mercurial is configured to be more secure than the server can support)
522 522 (consider contacting the operator of this server and ask them to support modern TLS protocol versions; or, set hostsecurity.localhost:minimumprotocol=tls1.0 to allow use of legacy, less secure protocols when communicating with this server)
523 523 (see https://mercurial-scm.org/wiki/SecureConnections for more info)
524 524 abort: error: *unsupported protocol* (glob)
525 525 [255]
526 526
527 527 .hg/hgrc file [hostsecurity] settings are applied to remote ui instances (issue5305)
528 528
529 529 $ cat >> copy-pull/.hg/hgrc << EOF
530 530 > [hostsecurity]
531 531 > localhost:minimumprotocol=tls1.2
532 532 > EOF
533 533 $ P="$CERTSDIR" hg -R copy-pull id https://localhost:$HGPORT/
534 534 (could not negotiate a common security protocol (tls1.2+) with localhost; the likely cause is Mercurial is configured to be more secure than the server can support)
535 535 (consider contacting the operator of this server and ask them to support modern TLS protocol versions; or, set hostsecurity.localhost:minimumprotocol=tls1.0 to allow use of legacy, less secure protocols when communicating with this server)
536 536 (see https://mercurial-scm.org/wiki/SecureConnections for more info)
537 537 abort: error: *unsupported protocol* (glob)
538 538 [255]
539 539
540 540 $ killdaemons.py hg0.pid
541 541 $ killdaemons.py hg1.pid
542 542 $ killdaemons.py hg2.pid
543 543 #endif
544 544
545 545 Prepare for connecting through proxy
546 546
547 547 $ hg serve -R test -p $HGPORT -d --pid-file=hg0.pid --certificate=$PRIV
548 548 $ cat hg0.pid >> $DAEMON_PIDS
549 549 $ hg serve -R test -p $HGPORT2 -d --pid-file=hg2.pid --certificate=server-expired.pem
550 550 $ cat hg2.pid >> $DAEMON_PIDS
551 551 tinyproxy.py doesn't fully detach, so killing it may result in extra output
552 552 from the shell. So don't kill it.
553 553 $ tinyproxy.py $HGPORT1 localhost >proxy.log </dev/null 2>&1 &
554 554 $ while [ ! -f proxy.pid ]; do sleep 0; done
555 555 $ cat proxy.pid >> $DAEMON_PIDS
556 556
557 557 $ echo "[http_proxy]" >> copy-pull/.hg/hgrc
558 558 $ echo "always=True" >> copy-pull/.hg/hgrc
559 559 $ echo "[hostfingerprints]" >> copy-pull/.hg/hgrc
560 560 $ echo "localhost =" >> copy-pull/.hg/hgrc
561 561
562 562 Test unvalidated https through proxy
563 563
564 564 $ http_proxy=http://localhost:$HGPORT1/ hg -R copy-pull pull --insecure
565 565 pulling from https://localhost:$HGPORT/
566 566 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
567 567 warning: connection security to localhost is disabled per current settings; communication is susceptible to eavesdropping and tampering
568 568 searching for changes
569 569 no changes found
570 570
571 571 Test https with cacert and fingerprint through proxy
572 572
573 573 $ http_proxy=http://localhost:$HGPORT1/ hg -R copy-pull pull \
574 574 > --config web.cacerts="$CERTSDIR/pub.pem"
575 575 pulling from https://localhost:$HGPORT/
576 576 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
577 577 searching for changes
578 578 no changes found
579 579 $ http_proxy=http://localhost:$HGPORT1/ hg -R copy-pull pull https://localhost:$HGPORT/ --config hostfingerprints.localhost=ecd87cd6b386d04fc1b8b41c9d8f5e168eef1c03 --trace
580 580 pulling from https://*:$HGPORT/ (glob)
581 581 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
582 582 (SHA-1 fingerprint for localhost found in legacy [hostfingerprints] section; if you trust this fingerprint, set the following config value in [hostsecurity] and remove the old one from [hostfingerprints] to upgrade to a more secure SHA-256 fingerprint: localhost.fingerprints=sha256:20:de:b3:ad:b4:cd:a5:42:f0:74:41:1c:a2:70:1e:da:6e:c0:5c:16:9e:e7:22:0f:f1:b7:e5:6e:e4:92:af:7e)
583 583 searching for changes
584 584 no changes found
585 585
586 586 Test https with cert problems through proxy
587 587
588 588 $ http_proxy=http://localhost:$HGPORT1/ hg -R copy-pull pull \
589 589 > --config web.cacerts="$CERTSDIR/pub-other.pem"
590 590 pulling from https://localhost:$HGPORT/
591 591 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
592 592 abort: error: *certificate verify failed* (glob)
593 593 [255]
594 594 $ http_proxy=http://localhost:$HGPORT1/ hg -R copy-pull pull \
595 595 > --config web.cacerts="$CERTSDIR/pub-expired.pem" https://localhost:$HGPORT2/
596 596 pulling from https://localhost:$HGPORT2/
597 597 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
598 598 abort: error: *certificate verify failed* (glob)
599 599 [255]
600 600
601 601
602 602 $ killdaemons.py hg0.pid
603 603
604 604 #if sslcontext
605 605
606 606 Start hgweb that requires client certificates:
607 607
608 608 $ cd test
609 609 $ hg serve -p $HGPORT -d --pid-file=../hg0.pid --certificate=$PRIV \
610 610 > --config devel.servercafile=$PRIV --config devel.serverrequirecert=true
611 611 $ cat ../hg0.pid >> $DAEMON_PIDS
612 612 $ cd ..
613 613
614 614 without client certificate:
615 615
616 616 $ P="$CERTSDIR" hg id https://localhost:$HGPORT/
617 617 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
618 618 abort: error: *handshake failure* (glob)
619 619 [255]
620 620
621 621 with client certificate:
622 622
623 623 $ cat << EOT >> $HGRCPATH
624 624 > [auth]
625 625 > l.prefix = localhost
626 626 > l.cert = $CERTSDIR/client-cert.pem
627 627 > l.key = $CERTSDIR/client-key.pem
628 628 > EOT
629 629
630 630 $ P="$CERTSDIR" hg id https://localhost:$HGPORT/ \
631 631 > --config auth.l.key="$CERTSDIR/client-key-decrypted.pem"
632 632 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
633 633 5fed3813f7f5
634 634
635 635 $ printf '1234\n' | env P="$CERTSDIR" hg id https://localhost:$HGPORT/ \
636 636 > --config ui.interactive=True --config ui.nontty=True
637 637 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
638 638 passphrase for */client-key.pem: 5fed3813f7f5 (glob)
639 639
640 640 $ env P="$CERTSDIR" hg id https://localhost:$HGPORT/
641 641 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
642 642 abort: error: * (glob)
643 643 [255]
644 644
645 645 #endif
General Comments 0
You need to be logged in to leave comments. Login now