File tree 12 files changed +198
-6
lines changed
integration/connection-pool
12 files changed +198
-6
lines changed Original file line number Diff line number Diff line change @@ -43,6 +43,38 @@ matrix:
43
43
postgresql : ' 9.5'
44
44
dist : precise
45
45
46
+ # Run tests/paths with client certificate authentication
47
+ - node_js : lts/*
48
+ env :
49
+ - CC=clang CXX=clang++ npm_config_clang=1 PGUSER=postgres PGDATABASE=postgres
50
+ PGSSLMODE=verify-full
51
+ PGSSLROOTCERT=$TRAVIS_BUILD_DIR/packages/pg/test/tls/test-server-ca.crt
52
+ PGSSLCERT=$TRAVIS_BUILD_DIR/packages/pg/test/tls/test-client.crt
53
+ PGSSLKEY=$TRAVIS_BUILD_DIR/packages/pg/test/tls/test-client.key
54
+ PG_CLIENT_CERT_TEST=1
55
+ before_script :
56
+ - chmod go= packages/pg/test/tls/test-client.key
57
+ - |
58
+ sudo sed -i \
59
+ -e '/^ssl_cert_file =/d' \
60
+ -e '/^ssl_key_file =/d' \
61
+ /etc/postgresql/10/main/postgresql.conf
62
+
63
+ cat <<'travis ci breaks heredoc' | sudo tee -a /etc/postgresql/10/main/postgresql.conf > /dev/null
64
+ ssl_cert_file = 'test-server.crt'
65
+ ssl_key_file = 'test-server.key'
66
+ ssl_ca_file = 'test-client-ca.crt'
67
+
68
+ - printf 'hostssl all all %s cert\n' 127.0.0.1/32 ::1/128 | sudo tee /etc/postgresql/10/main/pg_hba.conf > /dev/null
69
+ - sudo make -C packages/pg/test/tls install DESTDIR=/var/ramfs/postgresql/10/main
70
+ - sudo systemctl restart postgresql@10-main
71
+ - yarn build
72
+ script :
73
+ - cd packages/pg
74
+ - node test/integration/connection-pool/tls-tests.js
75
+ - npm install --no-save pg-native
76
+ - node test/integration/connection-pool/tls-tests.js native
77
+
46
78
# different PostgreSQL versions on Node LTS
47
79
- node_js : lts/erbium
48
80
addons :
Original file line number Diff line number Diff line change @@ -76,12 +76,18 @@ class Connection extends EventEmitter {
76
76
return self . emit ( 'error' , new Error ( 'There was an error establishing an SSL connection' ) )
77
77
}
78
78
var tls = require ( 'tls' )
79
- const options = Object . assign (
80
- {
81
- socket : self . stream ,
82
- } ,
83
- self . ssl
84
- )
79
+ const options = {
80
+ socket : self . stream ,
81
+ }
82
+
83
+ if ( self . ssl !== true ) {
84
+ Object . assign ( options , self . ssl )
85
+
86
+ if ( 'key' in self . ssl ) {
87
+ options . key = self . ssl . key
88
+ }
89
+ }
90
+
85
91
if ( net . isIP ( host ) === 0 ) {
86
92
options . servername = host
87
93
}
Original file line number Diff line number Diff line change
1
+ 'use strict'
2
+
3
+ const fs = require ( 'fs' )
4
+
5
+ const helper = require ( './test-helper' )
6
+ const pg = helper . pg
7
+
8
+ const suite = new helper . Suite ( )
9
+
10
+ if ( process . env . PG_CLIENT_CERT_TEST ) {
11
+ suite . testAsync ( 'client certificate' , async ( ) => {
12
+ const pool = new pg . Pool ( {
13
+ ssl : {
14
+ ca : fs . readFileSync ( process . env . PGSSLROOTCERT ) ,
15
+ cert : fs . readFileSync ( process . env . PGSSLCERT ) ,
16
+ key : fs . readFileSync ( process . env . PGSSLKEY ) ,
17
+ } ,
18
+ } )
19
+
20
+ await pool . query ( 'SELECT 1' )
21
+ await pool . end ( )
22
+ } )
23
+ }
Original file line number Diff line number Diff line change
1
+ DESTDIR ::= /var/lib/postgres/data
2
+ POSTGRES_USER ::= postgres
3
+ POSTGRES_GROUP ::= postgres
4
+ DATABASE_HOST ::= localhost
5
+ DATABASE_USER ::= postgres
6
+
7
+ all : \
8
+ test-server-ca.crt \
9
+ test-client-ca.crt \
10
+ test-server.key \
11
+ test-server.crt \
12
+ test-client.key \
13
+ test-client.crt
14
+
15
+ clean :
16
+ rm -f \
17
+ test-server-ca.key \
18
+ test-client-ca.key \
19
+ test-server-ca.crt \
20
+ test-client-ca.crt \
21
+ test-server.key \
22
+ test-server.crt \
23
+ test-client.key \
24
+ test-client.crt
25
+
26
+ install : test-server.crt test-server.key test-client-ca.crt
27
+ install \
28
+ --owner=$(POSTGRES_USER ) \
29
+ --group=$(POSTGRES_GROUP ) \
30
+ --mode=0600 \
31
+ -t $(DESTDIR ) \
32
+ $^
33
+
34
+ test-% -ca.crt : test-% -ca.key
35
+ openssl req -new -x509 \
36
+ -subj ' /CN=node-postgres test $* CA' \
37
+ -days 3650 \
38
+ -key $< \
39
+ -out $@
40
+
41
+ test-server.csr : test-server.key
42
+ openssl req -new \
43
+ -subj ' /CN=$(DATABASE_HOST)' \
44
+ -key $< \
45
+ -out $@
46
+
47
+ test-client.csr : test-client.key
48
+ openssl req -new \
49
+ -subj ' /CN=$(DATABASE_USER)' \
50
+ -key $< \
51
+ -out $@
52
+
53
+ test-% .crt : test-% .csr test-% -ca.crt test-% -ca.key
54
+ openssl x509 -req \
55
+ -CA test-$* -ca.crt \
56
+ -CAkey test-$* -ca.key \
57
+ -set_serial 1 \
58
+ -days 3650 \
59
+ -in $< \
60
+ -out $@
61
+
62
+ % .key :
63
+ openssl genpkey \
64
+ -algorithm EC \
65
+ -pkeyopt ec_paramgen_curve:prime256v1 \
66
+ -out $@
67
+
68
+ .PHONY : all clean install
69
+ .SECONDARY : test-server-ca.key test-client-ca.key
70
+ .INTERMEDIATE : test-server.csr test-client.csr
71
+ .POSIX :
Original file line number Diff line number Diff line change
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIBozCCAUmgAwIBAgIUNYMF06PrmjsMR6x+C8k5YZn9heAwCgYIKoZIzj0EAwIw
3
+ JzElMCMGA1UEAwwcbm9kZS1wb3N0Z3JlcyB0ZXN0IGNsaWVudCBDQTAeFw0yMDEw
4
+ MzExOTI1NDdaFw0zMDEwMjkxOTI1NDdaMCcxJTAjBgNVBAMMHG5vZGUtcG9zdGdy
5
+ ZXMgdGVzdCBjbGllbnQgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASI/Efx
6
+ Pq0P54VKPkTUOTwBH1iuYbnLpd4kAGjb1E334/p9CEBbDREVSqDjYjWswFybxKIF
7
+ ooKXtMpEMJfymJAUo1MwUTAdBgNVHQ4EFgQU/b/FRwYZ5/VMjdesIolksiqNYK4w
8
+ HwYDVR0jBBgwFoAU/b/FRwYZ5/VMjdesIolksiqNYK4wDwYDVR0TAQH/BAUwAwEB
9
+ /zAKBggqhkjOPQQDAgNIADBFAiEApHFCAWGbRGqYkyiBO+gMyX6gF5oFJywUupZP
10
+ LfgIRDACIDBZotzPe6+BIl2fU9Xgm7CxV6cCoX8bPEJKveKMnOaN
11
+ -----END CERTIFICATE-----
Original file line number Diff line number Diff line change
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgKsipfQWM+41FriF7
3
+ kRxVaiNi8qY1fzLx6Dp/gUQQPG6hRANCAASI/EfxPq0P54VKPkTUOTwBH1iuYbnL
4
+ pd4kAGjb1E334/p9CEBbDREVSqDjYjWswFybxKIFooKXtMpEMJfymJAU
5
+ -----END PRIVATE KEY-----
Original file line number Diff line number Diff line change
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIBITCByAIBATAKBggqhkjOPQQDAjAnMSUwIwYDVQQDDBxub2RlLXBvc3RncmVz
3
+ IHRlc3QgY2xpZW50IENBMB4XDTIwMTAzMTE5MjU0N1oXDTMwMTAyOTE5MjU0N1ow
4
+ EzERMA8GA1UEAwwIcG9zdGdyZXMwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARY
5
+ 4j5AgTLi/O/UTB8l1mX+nD9u3SW9RwN1mekcqEZqCpOPMsQEQ/HLxaKnoSTD6w/G
6
+ NqrBnHlbMGPwEdKvV96bMAoGCCqGSM49BAMCA0gAMEUCIQDzfjm+BzmjrsIO4QRu
7
+ Et0ShHBK3Kley3oqnzoJHCUSmAIgdF5gELQ5mlJVX3bAI8h1cKiC/L6awwg7eBDU
8
+ S1gBTaI=
9
+ -----END CERTIFICATE-----
Original file line number Diff line number Diff line change
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgL9jW07+fXy/74Ub3
3
+ 579RXm0Xpo7lnNnQleSzkTEXCrmhRANCAARY4j5AgTLi/O/UTB8l1mX+nD9u3SW9
4
+ RwN1mekcqEZqCpOPMsQEQ/HLxaKnoSTD6w/GNqrBnHlbMGPwEdKvV96b
5
+ -----END PRIVATE KEY-----
Original file line number Diff line number Diff line change
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIBozCCAUmgAwIBAgIUD582G2ou0Lg9q7AJeAMpiQVaiPQwCgYIKoZIzj0EAwIw
3
+ JzElMCMGA1UEAwwcbm9kZS1wb3N0Z3JlcyB0ZXN0IHNlcnZlciBDQTAeFw0yMDEw
4
+ MzExOTI1NDdaFw0zMDEwMjkxOTI1NDdaMCcxJTAjBgNVBAMMHG5vZGUtcG9zdGdy
5
+ ZXMgdGVzdCBzZXJ2ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAT/jGRh
6
+ FiZu96o0hfgIkep4PusTwI6P1ASFh8LgnUu2bMcIlYakQK0ap2XvCaSl9675+Lu9
7
+ yNZaSZVA5LpFICXto1MwUTAdBgNVHQ4EFgQUHI1BK+6u7r9r1XhighuP2/eGcQUw
8
+ HwYDVR0jBBgwFoAUHI1BK+6u7r9r1XhighuP2/eGcQUwDwYDVR0TAQH/BAUwAwEB
9
+ /zAKBggqhkjOPQQDAgNIADBFAiALwBWN9pRpaGQ12G9ERACn8/6RtAoO4lI5RmaR
10
+ rsTHtAIhAJxMfzNIgBAgX7vBSjHaqA08CozIctDSVag/rDlAzgy0
11
+ -----END CERTIFICATE-----
Original file line number Diff line number Diff line change
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgyUd4vHDNrEFzfttP
3
+ z+AFp3Tbyui+b3i9YDW7VqpMOIKhRANCAAT/jGRhFiZu96o0hfgIkep4PusTwI6P
4
+ 1ASFh8LgnUu2bMcIlYakQK0ap2XvCaSl9675+Lu9yNZaSZVA5LpFICXt
5
+ -----END PRIVATE KEY-----
Original file line number Diff line number Diff line change
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIBITCByQIBATAKBggqhkjOPQQDAjAnMSUwIwYDVQQDDBxub2RlLXBvc3RncmVz
3
+ IHRlc3Qgc2VydmVyIENBMB4XDTIwMTAzMTE5MjU0N1oXDTMwMTAyOTE5MjU0N1ow
4
+ FDESMBAGA1UEAwwJbG9jYWxob3N0MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
5
+ 4Mwi6dHeWRZ2QU19a5ykq6gJfIVJDEaJqNlWXk/5/laiGy8ScBV0YAlvk9xsfAyU
6
+ YDxcQTjQkeC0bbzhdEPjNjAKBggqhkjOPQQDAgNHADBEAiB+DW/8Kg3tuoovAE+8
7
+ 1Pv/8OkF3MD4A1ztULkW3KJ4PwIgMn7ea3HrEQJoeSKFe1kKIgNrHftdC5kZQYj5
8
+ uNXYpLo=
9
+ -----END CERTIFICATE-----
Original file line number Diff line number Diff line change
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgBoW9xxWBH2tHiPFk
3
+ 9ajPALHyw0lHAY1DF8WvHQNodx2hRANCAATgzCLp0d5ZFnZBTX1rnKSrqAl8hUkM
4
+ Romo2VZeT/n+VqIbLxJwFXRgCW+T3Gx8DJRgPFxBONCR4LRtvOF0Q+M2
5
+ -----END PRIVATE KEY-----
You can’t perform that action at this time.
0 commit comments