|
134 | 134 |
|
135 | 135 | switch_server_cert($node, 'server-cn-only');
|
136 | 136 |
|
| 137 | +# Set of default settings for SSL parameters in connection string. This |
| 138 | +# makes the tests protected against any defaults the environment may have |
| 139 | +# in ~/.postgresql/. |
| 140 | +my $default_ssl_connstr = "sslkey=invalid sslcert=invalid sslrootcert=invalid sslcrl=invalid sslcrldir=invalid"; |
| 141 | + |
137 | 142 | $common_connstr =
|
138 |
| - "user=ssltestuser dbname=trustdb sslcert=invalid hostaddr=$SERVERHOSTADDR host=common-name.pg-ssltest.test"; |
| 143 | + "$default_ssl_connstr user=ssltestuser dbname=trustdb hostaddr=$SERVERHOSTADDR host=common-name.pg-ssltest.test"; |
139 | 144 |
|
140 | 145 | # The server should not accept non-SSL connections.
|
141 | 146 | $node->connect_fails(
|
|
212 | 217 | "CRL belonging to a different CA",
|
213 | 218 | expected_stderr => qr/SSL error: certificate verify failed/);
|
214 | 219 |
|
215 |
| -# The same for CRL directory |
| 220 | +# The same for CRL directory. sslcrl='' is added here to override the |
| 221 | +# invalid default, so as this does not interfere with this case. |
216 | 222 | $node->connect_fails(
|
217 |
| - "$common_connstr sslrootcert=ssl/root+server_ca.crt sslmode=verify-ca sslcrldir=ssl/client-crldir", |
| 223 | + "$common_connstr sslcrl='' sslrootcert=ssl/root+server_ca.crt sslmode=verify-ca sslcrldir=ssl/client-crldir", |
218 | 224 | "directory CRL belonging to a different CA",
|
219 | 225 | expected_stderr => qr/SSL error: certificate verify failed/);
|
220 | 226 |
|
|
231 | 237 | # Check that connecting with verify-full fails, when the hostname doesn't
|
232 | 238 | # match the hostname in the server's certificate.
|
233 | 239 | $common_connstr =
|
234 |
| - "user=ssltestuser dbname=trustdb sslcert=invalid sslrootcert=ssl/root+server_ca.crt hostaddr=$SERVERHOSTADDR"; |
| 240 | + "$default_ssl_connstr user=ssltestuser dbname=trustdb sslrootcert=ssl/root+server_ca.crt hostaddr=$SERVERHOSTADDR"; |
235 | 241 |
|
236 | 242 | $node->connect_ok("$common_connstr sslmode=require host=wronghost.test",
|
237 | 243 | "mismatch between host name and server certificate sslmode=require");
|
|
249 | 255 | switch_server_cert($node, 'server-multiple-alt-names');
|
250 | 256 |
|
251 | 257 | $common_connstr =
|
252 |
| - "user=ssltestuser dbname=trustdb sslcert=invalid sslrootcert=ssl/root+server_ca.crt hostaddr=$SERVERHOSTADDR sslmode=verify-full"; |
| 258 | + "$default_ssl_connstr user=ssltestuser dbname=trustdb sslrootcert=ssl/root+server_ca.crt hostaddr=$SERVERHOSTADDR sslmode=verify-full"; |
253 | 259 |
|
254 | 260 | $node->connect_ok(
|
255 | 261 | "$common_connstr host=dns1.alt-name.pg-ssltest.test",
|
|
278 | 284 | switch_server_cert($node, 'server-single-alt-name');
|
279 | 285 |
|
280 | 286 | $common_connstr =
|
281 |
| - "user=ssltestuser dbname=trustdb sslcert=invalid sslrootcert=ssl/root+server_ca.crt hostaddr=$SERVERHOSTADDR sslmode=verify-full"; |
| 287 | + "$default_ssl_connstr user=ssltestuser dbname=trustdb sslrootcert=ssl/root+server_ca.crt hostaddr=$SERVERHOSTADDR sslmode=verify-full"; |
282 | 288 |
|
283 | 289 | $node->connect_ok(
|
284 | 290 | "$common_connstr host=single.alt-name.pg-ssltest.test",
|
|
302 | 308 | switch_server_cert($node, 'server-cn-and-alt-names');
|
303 | 309 |
|
304 | 310 | $common_connstr =
|
305 |
| - "user=ssltestuser dbname=trustdb sslcert=invalid sslrootcert=ssl/root+server_ca.crt hostaddr=$SERVERHOSTADDR sslmode=verify-full"; |
| 311 | + "$default_ssl_connstr user=ssltestuser dbname=trustdb sslrootcert=ssl/root+server_ca.crt hostaddr=$SERVERHOSTADDR sslmode=verify-full"; |
306 | 312 |
|
307 | 313 | $node->connect_ok("$common_connstr host=dns1.alt-name.pg-ssltest.test",
|
308 | 314 | "certificate with both a CN and SANs 1");
|
|
319 | 325 | # not a very sensible certificate, but libpq should handle it gracefully.
|
320 | 326 | switch_server_cert($node, 'server-no-names');
|
321 | 327 | $common_connstr =
|
322 |
| - "user=ssltestuser dbname=trustdb sslcert=invalid sslrootcert=ssl/root+server_ca.crt hostaddr=$SERVERHOSTADDR"; |
| 328 | + "$default_ssl_connstr user=ssltestuser dbname=trustdb sslrootcert=ssl/root+server_ca.crt hostaddr=$SERVERHOSTADDR"; |
323 | 329 |
|
324 | 330 | $node->connect_ok(
|
325 | 331 | "$common_connstr sslmode=verify-ca host=common-name.pg-ssltest.test",
|
|
335 | 341 | switch_server_cert($node, 'server-revoked');
|
336 | 342 |
|
337 | 343 | $common_connstr =
|
338 |
| - "user=ssltestuser dbname=trustdb sslcert=invalid hostaddr=$SERVERHOSTADDR host=common-name.pg-ssltest.test"; |
| 344 | + "$default_ssl_connstr user=ssltestuser dbname=trustdb hostaddr=$SERVERHOSTADDR host=common-name.pg-ssltest.test"; |
339 | 345 |
|
340 | 346 | # Without the CRL, succeeds. With it, fails.
|
341 | 347 | $node->connect_ok(
|
|
345 | 351 | "$common_connstr sslrootcert=ssl/root+server_ca.crt sslmode=verify-ca sslcrl=ssl/root+server.crl",
|
346 | 352 | "does not connect with client-side CRL file",
|
347 | 353 | expected_stderr => qr/SSL error: certificate verify failed/);
|
| 354 | +# sslcrl='' is added here to override the invalid default, so as this |
| 355 | +# does not interfere with this case. |
348 | 356 | $node->connect_fails(
|
349 |
| - "$common_connstr sslrootcert=ssl/root+server_ca.crt sslmode=verify-ca sslcrldir=ssl/root+server-crldir", |
| 357 | + "$common_connstr sslcrl='' sslrootcert=ssl/root+server_ca.crt sslmode=verify-ca sslcrldir=ssl/root+server-crldir", |
350 | 358 | "does not connect with client-side CRL directory",
|
351 | 359 | expected_stderr => qr/SSL error: certificate verify failed/);
|
352 | 360 |
|
|
388 | 396 | note "running server tests";
|
389 | 397 |
|
390 | 398 | $common_connstr =
|
391 |
| - "sslrootcert=ssl/root+server_ca.crt sslmode=require dbname=certdb hostaddr=$SERVERHOSTADDR host=localhost"; |
| 399 | + "$default_ssl_connstr sslrootcert=ssl/root+server_ca.crt sslmode=require dbname=certdb hostaddr=$SERVERHOSTADDR host=localhost"; |
392 | 400 |
|
393 | 401 | # no client cert
|
394 | 402 | $node->connect_fails(
|
|
538 | 546 | # works, iff username matches Common Name
|
539 | 547 | # fails, iff username doesn't match Common Name.
|
540 | 548 | $common_connstr =
|
541 |
| - "sslrootcert=ssl/root+server_ca.crt sslmode=require dbname=verifydb hostaddr=$SERVERHOSTADDR host=localhost"; |
| 549 | + "$default_ssl_connstr sslrootcert=ssl/root+server_ca.crt sslmode=require dbname=verifydb hostaddr=$SERVERHOSTADDR host=localhost"; |
542 | 550 |
|
543 | 551 | $node->connect_ok(
|
544 | 552 | "$common_connstr user=ssltestuser sslcert=ssl/client.crt sslkey=ssl/client_tmp.key",
|
|
565 | 573 | # intermediate client_ca.crt is provided by client, and isn't in server's ssl_ca_file
|
566 | 574 | switch_server_cert($node, 'server-cn-only', 'root_ca');
|
567 | 575 | $common_connstr =
|
568 |
| - "user=ssltestuser dbname=certdb sslkey=ssl/client_tmp.key sslrootcert=ssl/root+server_ca.crt hostaddr=$SERVERHOSTADDR host=localhost"; |
| 576 | + "$default_ssl_connstr user=ssltestuser dbname=certdb sslkey=ssl/client_tmp.key sslrootcert=ssl/root+server_ca.crt hostaddr=$SERVERHOSTADDR host=localhost"; |
569 | 577 |
|
570 | 578 | $node->connect_ok(
|
571 | 579 | "$common_connstr sslmode=require sslcert=ssl/client+client_ca.crt",
|
|
0 commit comments