##// END OF EJS Templates
test-https: glob error messages more so we pass on Python 2.7.9...
Augie Fackler -
r23823:bd72e75f default
parent child Browse files
Show More
@@ -1,293 +1,293
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 Certificates created with:
6 6 printf '.\n.\n.\n.\n.\nlocalhost\nhg@localhost\n' | \
7 7 openssl req -newkey rsa:512 -keyout priv.pem -nodes -x509 -days 9000 -out pub.pem
8 8 Can be dumped with:
9 9 openssl x509 -in pub.pem -text
10 10
11 11 $ cat << EOT > priv.pem
12 12 > -----BEGIN PRIVATE KEY-----
13 13 > MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEApjCWeYGrIa/Vo7LH
14 14 > aRF8ou0tbgHKE33Use/whCnKEUm34rDaXQd4lxxX6aDWg06n9tiVStAKTgQAHJY8
15 15 > j/xgSwIDAQABAkBxHC6+Qlf0VJXGlb6NL16yEVVTQxqDS6hA9zqu6TZjrr0YMfzc
16 16 > EGNIiZGt7HCBL0zO+cPDg/LeCZc6HQhf0KrhAiEAzlJq4hWWzvguWFIJWSoBeBUG
17 17 > MF1ACazQO7PYE8M0qfECIQDONHHP0SKZzz/ZwBZcAveC5K61f/v9hONFwbeYulzR
18 18 > +wIgc9SvbtgB/5Yzpp//4ZAEnR7oh5SClCvyB+KSx52K3nECICbhQphhoXmI10wy
19 19 > aMTellaq0bpNMHFDziqH9RsqAHhjAiEAgYGxfzkftt5IUUn/iFK89aaIpyrpuaAh
20 20 > HY8gUVkVRVs=
21 21 > -----END PRIVATE KEY-----
22 22 > EOT
23 23
24 24 $ cat << EOT > pub.pem
25 25 > -----BEGIN CERTIFICATE-----
26 26 > MIIBqzCCAVWgAwIBAgIJANAXFFyWjGnRMA0GCSqGSIb3DQEBBQUAMDExEjAQBgNV
27 27 > BAMMCWxvY2FsaG9zdDEbMBkGCSqGSIb3DQEJARYMaGdAbG9jYWxob3N0MB4XDTEw
28 28 > MTAxNDIwMzAxNFoXDTM1MDYwNTIwMzAxNFowMTESMBAGA1UEAwwJbG9jYWxob3N0
29 29 > MRswGQYJKoZIhvcNAQkBFgxoZ0Bsb2NhbGhvc3QwXDANBgkqhkiG9w0BAQEFAANL
30 30 > ADBIAkEApjCWeYGrIa/Vo7LHaRF8ou0tbgHKE33Use/whCnKEUm34rDaXQd4lxxX
31 31 > 6aDWg06n9tiVStAKTgQAHJY8j/xgSwIDAQABo1AwTjAdBgNVHQ4EFgQUE6sA+amm
32 32 > r24dGX0kpjxOgO45hzQwHwYDVR0jBBgwFoAUE6sA+ammr24dGX0kpjxOgO45hzQw
33 33 > DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAANBAFArvQFiAZJgQczRsbYlG1xl
34 34 > t+truk37w5B3m3Ick1ntRcQrqs+hf0CO1q6Squ144geYaQ8CDirSR92fICELI1c=
35 35 > -----END CERTIFICATE-----
36 36 > EOT
37 37 $ cat priv.pem pub.pem >> server.pem
38 38 $ PRIV=`pwd`/server.pem
39 39
40 40 $ cat << EOT > pub-other.pem
41 41 > -----BEGIN CERTIFICATE-----
42 42 > MIIBqzCCAVWgAwIBAgIJALwZS731c/ORMA0GCSqGSIb3DQEBBQUAMDExEjAQBgNV
43 43 > BAMMCWxvY2FsaG9zdDEbMBkGCSqGSIb3DQEJARYMaGdAbG9jYWxob3N0MB4XDTEw
44 44 > MTAxNDIwNDUxNloXDTM1MDYwNTIwNDUxNlowMTESMBAGA1UEAwwJbG9jYWxob3N0
45 45 > MRswGQYJKoZIhvcNAQkBFgxoZ0Bsb2NhbGhvc3QwXDANBgkqhkiG9w0BAQEFAANL
46 46 > ADBIAkEAsxsapLbHrqqUKuQBxdpK4G3m2LjtyrTSdpzzzFlecxd5yhNP6AyWrufo
47 47 > K4VMGo2xlu9xOo88nDSUNSKPuD09MwIDAQABo1AwTjAdBgNVHQ4EFgQUoIB1iMhN
48 48 > y868rpQ2qk9dHnU6ebswHwYDVR0jBBgwFoAUoIB1iMhNy868rpQ2qk9dHnU6ebsw
49 49 > DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAANBAJ544f125CsE7J2t55PdFaF6
50 50 > bBlNBb91FCywBgSjhBjf+GG3TNPwrPdc3yqeq+hzJiuInqbOBv9abmMyq8Wsoig=
51 51 > -----END CERTIFICATE-----
52 52 > EOT
53 53
54 54 pub.pem patched with other notBefore / notAfter:
55 55
56 56 $ cat << EOT > pub-not-yet.pem
57 57 > -----BEGIN CERTIFICATE-----
58 58 > MIIBqzCCAVWgAwIBAgIJANAXFFyWjGnRMA0GCSqGSIb3DQEBBQUAMDExEjAQBgNVBAMMCWxvY2Fs
59 59 > aG9zdDEbMBkGCSqGSIb3DQEJARYMaGdAbG9jYWxob3N0MB4XDTM1MDYwNTIwMzAxNFoXDTM1MDYw
60 60 > NTIwMzAxNFowMTESMBAGA1UEAwwJbG9jYWxob3N0MRswGQYJKoZIhvcNAQkBFgxoZ0Bsb2NhbGhv
61 61 > c3QwXDANBgkqhkiG9w0BAQEFAANLADBIAkEApjCWeYGrIa/Vo7LHaRF8ou0tbgHKE33Use/whCnK
62 62 > EUm34rDaXQd4lxxX6aDWg06n9tiVStAKTgQAHJY8j/xgSwIDAQABo1AwTjAdBgNVHQ4EFgQUE6sA
63 63 > +ammr24dGX0kpjxOgO45hzQwHwYDVR0jBBgwFoAUE6sA+ammr24dGX0kpjxOgO45hzQwDAYDVR0T
64 64 > BAUwAwEB/zANBgkqhkiG9w0BAQUFAANBAJXV41gWnkgC7jcpPpFRSUSZaxyzrXmD1CIqQf0WgVDb
65 65 > /12E0vR2DuZitgzUYtBaofM81aTtc0a2/YsrmqePGm0=
66 66 > -----END CERTIFICATE-----
67 67 > EOT
68 68 $ cat priv.pem pub-not-yet.pem > server-not-yet.pem
69 69
70 70 $ cat << EOT > pub-expired.pem
71 71 > -----BEGIN CERTIFICATE-----
72 72 > MIIBqzCCAVWgAwIBAgIJANAXFFyWjGnRMA0GCSqGSIb3DQEBBQUAMDExEjAQBgNVBAMMCWxvY2Fs
73 73 > aG9zdDEbMBkGCSqGSIb3DQEJARYMaGdAbG9jYWxob3N0MB4XDTEwMTAxNDIwMzAxNFoXDTEwMTAx
74 74 > NDIwMzAxNFowMTESMBAGA1UEAwwJbG9jYWxob3N0MRswGQYJKoZIhvcNAQkBFgxoZ0Bsb2NhbGhv
75 75 > c3QwXDANBgkqhkiG9w0BAQEFAANLADBIAkEApjCWeYGrIa/Vo7LHaRF8ou0tbgHKE33Use/whCnK
76 76 > EUm34rDaXQd4lxxX6aDWg06n9tiVStAKTgQAHJY8j/xgSwIDAQABo1AwTjAdBgNVHQ4EFgQUE6sA
77 77 > +ammr24dGX0kpjxOgO45hzQwHwYDVR0jBBgwFoAUE6sA+ammr24dGX0kpjxOgO45hzQwDAYDVR0T
78 78 > BAUwAwEB/zANBgkqhkiG9w0BAQUFAANBAJfk57DTRf2nUbYaMSlVAARxMNbFGOjQhAUtY400GhKt
79 79 > 2uiKCNGKXVXD3AHWe13yHc5KttzbHQStE5Nm/DlWBWQ=
80 80 > -----END CERTIFICATE-----
81 81 > EOT
82 82 $ cat priv.pem pub-expired.pem > server-expired.pem
83 83
84 84 $ hg init test
85 85 $ cd test
86 86 $ echo foo>foo
87 87 $ mkdir foo.d foo.d/bAr.hg.d foo.d/baR.d.hg
88 88 $ echo foo>foo.d/foo
89 89 $ echo bar>foo.d/bAr.hg.d/BaR
90 90 $ echo bar>foo.d/baR.d.hg/bAR
91 91 $ hg commit -A -m 1
92 92 adding foo
93 93 adding foo.d/bAr.hg.d/BaR
94 94 adding foo.d/baR.d.hg/bAR
95 95 adding foo.d/foo
96 96 $ hg serve -p $HGPORT -d --pid-file=../hg0.pid --certificate=$PRIV
97 97 $ cat ../hg0.pid >> $DAEMON_PIDS
98 98
99 99 cacert not found
100 100
101 101 $ hg in --config web.cacerts=no-such.pem https://localhost:$HGPORT/
102 102 abort: could not find web.cacerts: no-such.pem
103 103 [255]
104 104
105 105 Test server address cannot be reused
106 106
107 107 #if windows
108 108 $ hg serve -p $HGPORT --certificate=$PRIV 2>&1
109 109 abort: cannot start server at ':$HGPORT':
110 110 [255]
111 111 #else
112 112 $ hg serve -p $HGPORT --certificate=$PRIV 2>&1
113 113 abort: cannot start server at ':$HGPORT': Address already in use
114 114 [255]
115 115 #endif
116 116 $ cd ..
117 117
118 118 OS X has a dummy CA cert that enables use of the system CA store when using
119 119 Apple's OpenSSL. This trick do not work with plain OpenSSL.
120 120
121 121 $ DISABLEOSXDUMMYCERT=
122 122 #if osx
123 123 $ hg clone https://localhost:$HGPORT/ copy-pull
124 abort: error: *:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed (glob)
124 abort: error: *certificate verify failed* (glob)
125 125 [255]
126 126
127 127 $ DISABLEOSXDUMMYCERT="--config=web.cacerts="
128 128 #endif
129 129
130 130 clone via pull
131 131
132 132 $ hg clone https://localhost:$HGPORT/ copy-pull $DISABLEOSXDUMMYCERT
133 133 warning: localhost certificate with fingerprint 91:4f:1a:ff:87:24:9c:09:b6:85:9b:88:b1:90:6d:30:75:64:91:ca not verified (check hostfingerprints or web.cacerts config setting)
134 134 requesting all changes
135 135 adding changesets
136 136 adding manifests
137 137 adding file changes
138 138 added 1 changesets with 4 changes to 4 files
139 139 updating to branch default
140 140 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
141 141 $ hg verify -R copy-pull
142 142 checking changesets
143 143 checking manifests
144 144 crosschecking files in changesets and manifests
145 145 checking files
146 146 4 files, 1 changesets, 4 total revisions
147 147 $ cd test
148 148 $ echo bar > bar
149 149 $ hg commit -A -d '1 0' -m 2
150 150 adding bar
151 151 $ cd ..
152 152
153 153 pull without cacert
154 154
155 155 $ cd copy-pull
156 156 $ echo '[hooks]' >> .hg/hgrc
157 157 $ echo "changegroup = python \"$TESTDIR/printenv.py\" changegroup" >> .hg/hgrc
158 158 $ hg pull $DISABLEOSXDUMMYCERT
159 159 warning: localhost certificate with fingerprint 91:4f:1a:ff:87:24:9c:09:b6:85:9b:88:b1:90:6d:30:75:64:91:ca not verified (check hostfingerprints or web.cacerts config setting)
160 160 pulling from https://localhost:$HGPORT/
161 161 searching for changes
162 162 adding changesets
163 163 adding manifests
164 164 adding file changes
165 165 added 1 changesets with 1 changes to 1 files
166 166 changegroup hook: HG_NODE=5fed3813f7f5e1824344fdc9cf8f63bb662c292d HG_SOURCE=pull HG_URL=https://localhost:$HGPORT/
167 167 (run 'hg update' to get a working copy)
168 168 $ cd ..
169 169
170 170 cacert configured in local repo
171 171
172 172 $ cp copy-pull/.hg/hgrc copy-pull/.hg/hgrc.bu
173 173 $ echo "[web]" >> copy-pull/.hg/hgrc
174 174 $ echo "cacerts=`pwd`/pub.pem" >> copy-pull/.hg/hgrc
175 175 $ hg -R copy-pull pull --traceback
176 176 pulling from https://localhost:$HGPORT/
177 177 searching for changes
178 178 no changes found
179 179 $ mv copy-pull/.hg/hgrc.bu copy-pull/.hg/hgrc
180 180
181 181 cacert configured globally, also testing expansion of environment
182 182 variables in the filename
183 183
184 184 $ echo "[web]" >> $HGRCPATH
185 185 $ echo 'cacerts=$P/pub.pem' >> $HGRCPATH
186 186 $ P=`pwd` hg -R copy-pull pull
187 187 pulling from https://localhost:$HGPORT/
188 188 searching for changes
189 189 no changes found
190 190 $ P=`pwd` hg -R copy-pull pull --insecure
191 191 warning: localhost certificate with fingerprint 91:4f:1a:ff:87:24:9c:09:b6:85:9b:88:b1:90:6d:30:75:64:91:ca not verified (check hostfingerprints or web.cacerts config setting)
192 192 pulling from https://localhost:$HGPORT/
193 193 searching for changes
194 194 no changes found
195 195
196 196 cacert mismatch
197 197
198 198 $ hg -R copy-pull pull --config web.cacerts=pub.pem https://127.0.0.1:$HGPORT/
199 199 abort: 127.0.0.1 certificate error: certificate is for localhost
200 200 (configure hostfingerprint 91:4f:1a:ff:87:24:9c:09:b6:85:9b:88:b1:90:6d:30:75:64:91:ca or use --insecure to connect insecurely)
201 201 [255]
202 202 $ hg -R copy-pull pull --config web.cacerts=pub.pem https://127.0.0.1:$HGPORT/ --insecure
203 203 warning: 127.0.0.1 certificate with fingerprint 91:4f:1a:ff:87:24:9c:09:b6:85:9b:88:b1:90:6d:30:75:64:91:ca not verified (check hostfingerprints or web.cacerts config setting)
204 204 pulling from https://127.0.0.1:$HGPORT/
205 205 searching for changes
206 206 no changes found
207 207 $ hg -R copy-pull pull --config web.cacerts=pub-other.pem
208 abort: error: *:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed (glob)
208 abort: error: *certificate verify failed* (glob)
209 209 [255]
210 210 $ hg -R copy-pull pull --config web.cacerts=pub-other.pem --insecure
211 211 warning: localhost certificate with fingerprint 91:4f:1a:ff:87:24:9c:09:b6:85:9b:88:b1:90:6d:30:75:64:91:ca not verified (check hostfingerprints or web.cacerts config setting)
212 212 pulling from https://localhost:$HGPORT/
213 213 searching for changes
214 214 no changes found
215 215
216 216 Test server cert which isn't valid yet
217 217
218 218 $ hg -R test serve -p $HGPORT1 -d --pid-file=hg1.pid --certificate=server-not-yet.pem
219 219 $ cat hg1.pid >> $DAEMON_PIDS
220 220 $ hg -R copy-pull pull --config web.cacerts=pub-not-yet.pem https://localhost:$HGPORT1/
221 abort: error: *:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed (glob)
221 abort: error: *certificate verify failed* (glob)
222 222 [255]
223 223
224 224 Test server cert which no longer is valid
225 225
226 226 $ hg -R test serve -p $HGPORT2 -d --pid-file=hg2.pid --certificate=server-expired.pem
227 227 $ cat hg2.pid >> $DAEMON_PIDS
228 228 $ hg -R copy-pull pull --config web.cacerts=pub-expired.pem https://localhost:$HGPORT2/
229 abort: error: *:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed (glob)
229 abort: error: *certificate verify failed* (glob)
230 230 [255]
231 231
232 232 Fingerprints
233 233
234 234 $ echo "[hostfingerprints]" >> copy-pull/.hg/hgrc
235 235 $ echo "localhost = 91:4f:1a:ff:87:24:9c:09:b6:85:9b:88:b1:90:6d:30:75:64:91:ca" >> copy-pull/.hg/hgrc
236 236 $ echo "127.0.0.1 = 914f1aff87249c09b6859b88b1906d30756491ca" >> copy-pull/.hg/hgrc
237 237
238 238 - works without cacerts
239 239 $ hg -R copy-pull id https://localhost:$HGPORT/ --config web.cacerts=
240 240 5fed3813f7f5
241 241
242 242 - fails when cert doesn't match hostname (port is ignored)
243 243 $ hg -R copy-pull id https://localhost:$HGPORT1/
244 244 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
245 245 (check hostfingerprint configuration)
246 246 [255]
247 247
248 248
249 249 - ignores that certificate doesn't match hostname
250 250 $ hg -R copy-pull id https://127.0.0.1:$HGPORT/
251 251 5fed3813f7f5
252 252
253 253 HGPORT1 is reused below for tinyproxy tests. Kill that server.
254 254 $ "$TESTDIR/killdaemons.py" hg1.pid
255 255
256 256 Prepare for connecting through proxy
257 257
258 258 $ "$TESTDIR/tinyproxy.py" $HGPORT1 localhost >proxy.log </dev/null 2>&1 &
259 259 $ while [ ! -f proxy.pid ]; do sleep 0; done
260 260 $ cat proxy.pid >> $DAEMON_PIDS
261 261
262 262 $ echo "[http_proxy]" >> copy-pull/.hg/hgrc
263 263 $ echo "always=True" >> copy-pull/.hg/hgrc
264 264 $ echo "[hostfingerprints]" >> copy-pull/.hg/hgrc
265 265 $ echo "localhost =" >> copy-pull/.hg/hgrc
266 266
267 267 Test unvalidated https through proxy
268 268
269 269 $ http_proxy=http://localhost:$HGPORT1/ hg -R copy-pull pull --insecure --traceback
270 270 warning: localhost certificate with fingerprint 91:4f:1a:ff:87:24:9c:09:b6:85:9b:88:b1:90:6d:30:75:64:91:ca not verified (check hostfingerprints or web.cacerts config setting)
271 271 pulling from https://localhost:$HGPORT/
272 272 searching for changes
273 273 no changes found
274 274
275 275 Test https with cacert and fingerprint through proxy
276 276
277 277 $ http_proxy=http://localhost:$HGPORT1/ hg -R copy-pull pull --config web.cacerts=pub.pem
278 278 pulling from https://localhost:$HGPORT/
279 279 searching for changes
280 280 no changes found
281 281 $ http_proxy=http://localhost:$HGPORT1/ hg -R copy-pull pull https://127.0.0.1:$HGPORT/
282 282 pulling from https://127.0.0.1:$HGPORT/
283 283 searching for changes
284 284 no changes found
285 285
286 286 Test https with cert problems through proxy
287 287
288 288 $ http_proxy=http://localhost:$HGPORT1/ hg -R copy-pull pull --config web.cacerts=pub-other.pem
289 abort: error: *:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed (glob)
289 abort: error: *certificate verify failed* (glob)
290 290 [255]
291 291 $ http_proxy=http://localhost:$HGPORT1/ hg -R copy-pull pull --config web.cacerts=pub-expired.pem https://localhost:$HGPORT2/
292 abort: error: *:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed (glob)
292 abort: error: *certificate verify failed* (glob)
293 293 [255]
General Comments 0
You need to be logged in to leave comments. Login now