@@ -51,10 +51,6 @@ func TestConfig_AppendCA_Valid(t *testing.T) {
51
51
func TestConfig_AppendCA_Valid_MultipleCerts (t * testing.T ) {
52
52
require := require .New (t )
53
53
54
- tmpCAFile , err := ioutil .TempFile ("/tmp" , "test_ca_file" )
55
- require .Nil (err )
56
- defer os .Remove (tmpCAFile .Name ())
57
-
58
54
certs := `
59
55
-----BEGIN CERTIFICATE-----
60
56
MIICMzCCAdqgAwIBAgIUNZ9L86Xp9EuDH0/qyAesh599LXQwCgYIKoZIzj0EAwIw
@@ -71,6 +67,61 @@ AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOjVq/BectnhcKn6EHUD4NJFm
71
67
Ln2ZUe8CIDsQswBQS7URbqnKYDye2Y4befJkr4fmhhmMQb2ex9A4
72
68
-----END CERTIFICATE-----
73
69
-----BEGIN CERTIFICATE-----
70
+ MIICNTCCAZagAwIBAgIRANjgoh5iVZI26+Hz/K65G0UwCgYIKoZIzj0EAwQwNjEb
71
+ MBkGA1UEChMSSGFzaGlDb3JwIFRyYWluaW5nMRcwFQYDVQQDEw5zZXJ2aWNlLmNv
72
+ bnN1bDAeFw0xODA4MjMxNzM0NTBaFw0xODA5MjIxNzM0NTBaMDYxGzAZBgNVBAoT
73
+ Ekhhc2hpQ29ycCBUcmFpbmluZzEXMBUGA1UEAxMOc2VydmljZS5jb25zdWwwgZsw
74
+ EAYHKoZIzj0CAQYFK4EEACMDgYYABAGjC4sWsOfirS/DQ9/e7PdQeJwlOjziiOx/
75
+ CALjS6ryEDkZPqRqMuoFXfudAmfdk6tl8AT1IKMVcgiQU5jkm7fliwFIk48uh+n2
76
+ obqZjwDyM76VYBVSYi6i3BPXown1ivIMJNQS1txnWZLZHsv+WxbHydS+GNOAwKDK
77
+ KsXj9dEhd36pvaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
78
+ HQYDVR0OBBYEFIk3oG2hu0FxueW4e7fL+FdMOquBMAoGCCqGSM49BAMEA4GMADCB
79
+ iAJCAPIPwPyk+8Ymj7Zlvb5qIUQg+UxoacAeJtFZrJ8xQjro0YjsM33O86rAfw+x
80
+ sWWGul4Ews93KFBXvhbKCwb0F0PhAkIAh2z7COsKcQzvBoIy+Kx92+9j/sUjlzzl
81
+ TttDu+g2VdbcBwVDZ49X2Md6OY2N3G8Irdlj+n+mCQJaHwVt52DRzz0=
82
+ -----END CERTIFICATE-----
83
+ `
84
+
85
+ tmpCAFile , err := ioutil .TempFile ("/tmp" , "test_ca_file" )
86
+ require .NoError (err )
87
+ defer os .Remove (tmpCAFile .Name ())
88
+
89
+ _ , err = tmpCAFile .Write ([]byte (certs ))
90
+ require .NoError (err )
91
+ tmpCAFile .Close ()
92
+
93
+ conf := & Config {
94
+ CAFile : tmpCAFile .Name (),
95
+ }
96
+ pool := x509 .NewCertPool ()
97
+ require .NoError (conf .AppendCA (pool ))
98
+
99
+ require .Len (pool .Subjects (), 2 )
100
+ }
101
+
102
+ // TestConfig_AppendCA_Valid_Whitespace asserts that a PEM file containing
103
+ // trailing whitespace is valid.
104
+ func TestConfig_AppendCA_Valid_Whitespace (t * testing.T ) {
105
+ require := require .New (t )
106
+
107
+ const cacertWhitespace = "./testdata/ca-whitespace.pem"
108
+ conf := & Config {
109
+ CAFile : cacertWhitespace ,
110
+ }
111
+ pool := x509 .NewCertPool ()
112
+ require .NoError (conf .AppendCA (pool ))
113
+
114
+ require .Len (pool .Subjects (), 1 )
115
+ }
116
+
117
+ // TestConfig_AppendCA_Invalid_MultipleCerts_Whitespace asserts that a PEM file
118
+ // containing non-PEM data between certificate blocks is still valid.
119
+ func TestConfig_AppendCA_Valid_MultipleCerts_ExtraData (t * testing.T ) {
120
+ require := require .New (t )
121
+
122
+ certs := `
123
+ Did you know...
124
+ -----BEGIN CERTIFICATE-----
74
125
MIICMzCCAdqgAwIBAgIUNZ9L86Xp9EuDH0/qyAesh599LXQwCgYIKoZIzj0EAwIw
75
126
eDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNh
76
127
biBGcmFuY2lzY28xEjAQBgNVBAoTCUhhc2hpQ29ycDEOMAwGA1UECxMFTm9tYWQx
@@ -83,27 +134,50 @@ uNdZJZWSi4Q/4HojM5FTSBqYxNgSrmY/o3oQrCPlo0IwQDAOBgNVHQ8BAf8EBAMC
83
134
AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOjVq/BectnhcKn6EHUD4NJFm
84
135
/UAwCgYIKoZIzj0EAwIDRwAwRAIgTemDJGSGtcQPXLWKiQNw4SKO9wAPhn/WoKW4
85
136
Ln2ZUe8CIDsQswBQS7URbqnKYDye2Y4befJkr4fmhhmMQb2ex9A4
86
- -----END CERTIFICATE-----`
137
+ -----END CERTIFICATE-----
138
+
139
+ ...PEM parsers don't care about data...
140
+
141
+ -----BEGIN CERTIFICATE-----
142
+ MIICNTCCAZagAwIBAgIRANjgoh5iVZI26+Hz/K65G0UwCgYIKoZIzj0EAwQwNjEb
143
+ MBkGA1UEChMSSGFzaGlDb3JwIFRyYWluaW5nMRcwFQYDVQQDEw5zZXJ2aWNlLmNv
144
+ bnN1bDAeFw0xODA4MjMxNzM0NTBaFw0xODA5MjIxNzM0NTBaMDYxGzAZBgNVBAoT
145
+ Ekhhc2hpQ29ycCBUcmFpbmluZzEXMBUGA1UEAxMOc2VydmljZS5jb25zdWwwgZsw
146
+ EAYHKoZIzj0CAQYFK4EEACMDgYYABAGjC4sWsOfirS/DQ9/e7PdQeJwlOjziiOx/
147
+ CALjS6ryEDkZPqRqMuoFXfudAmfdk6tl8AT1IKMVcgiQU5jkm7fliwFIk48uh+n2
148
+ obqZjwDyM76VYBVSYi6i3BPXown1ivIMJNQS1txnWZLZHsv+WxbHydS+GNOAwKDK
149
+ KsXj9dEhd36pvaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
150
+ HQYDVR0OBBYEFIk3oG2hu0FxueW4e7fL+FdMOquBMAoGCCqGSM49BAMEA4GMADCB
151
+ iAJCAPIPwPyk+8Ymj7Zlvb5qIUQg+UxoacAeJtFZrJ8xQjro0YjsM33O86rAfw+x
152
+ sWWGul4Ews93KFBXvhbKCwb0F0PhAkIAh2z7COsKcQzvBoIy+Kx92+9j/sUjlzzl
153
+ TttDu+g2VdbcBwVDZ49X2Md6OY2N3G8Irdlj+n+mCQJaHwVt52DRzz0=
154
+ -----END CERTIFICATE-----
155
+
156
+ ...outside of -----XXX----- blocks?
157
+ `
87
158
159
+ tmpCAFile , err := ioutil .TempFile ("/tmp" , "test_ca_file_extra" )
160
+ require .NoError (err )
161
+ defer os .Remove (tmpCAFile .Name ())
88
162
_ , err = tmpCAFile .Write ([]byte (certs ))
89
- require .Nil (err )
163
+ require .NoError (err )
164
+ tmpCAFile .Close ()
90
165
91
166
conf := & Config {
92
167
CAFile : tmpCAFile .Name (),
93
168
}
94
169
pool := x509 .NewCertPool ()
95
170
err = conf .AppendCA (pool )
96
171
97
- require .Nil (err )
172
+ require .NoError (err )
173
+ require .Len (pool .Subjects (), 2 )
98
174
}
99
175
100
- func TestConfig_AppendCA_InValid_MultipleCerts (t * testing.T ) {
176
+ // TestConfig_AppendCA_Invalid_MultipleCerts asserts only the valid certificate
177
+ // is returned.
178
+ func TestConfig_AppendCA_Invalid_MultipleCerts (t * testing.T ) {
101
179
require := require .New (t )
102
180
103
- tmpCAFile , err := ioutil .TempFile ("/tmp" , "test_ca_file" )
104
- require .Nil (err )
105
- defer os .Remove (tmpCAFile .Name ())
106
-
107
181
certs := `
108
182
-----BEGIN CERTIFICATE-----
109
183
MIICMzCCAdqgAwIBAgIUNZ9L86Xp9EuDH0/qyAesh599LXQwCgYIKoZIzj0EAwIw
@@ -123,16 +197,20 @@ Ln2ZUe8CIDsQswBQS7URbqnKYDye2Y4befJkr4fmhhmMQb2ex9A4
123
197
Invalid
124
198
-----END CERTIFICATE-----`
125
199
200
+ tmpCAFile , err := ioutil .TempFile ("/tmp" , "test_ca_file" )
201
+ require .NoError (err )
202
+ defer os .Remove (tmpCAFile .Name ())
126
203
_ , err = tmpCAFile .Write ([]byte (certs ))
127
- require .Nil (err )
204
+ require .NoError (err )
205
+ tmpCAFile .Close ()
128
206
129
207
conf := & Config {
130
208
CAFile : tmpCAFile .Name (),
131
209
}
132
210
pool := x509 .NewCertPool ()
133
- err = conf .AppendCA (pool )
211
+ require . NoError ( conf .AppendCA (pool ) )
134
212
135
- require .NotNil ( err )
213
+ require .Len ( pool . Subjects (), 1 )
136
214
}
137
215
138
216
func TestConfig_AppendCA_Invalid (t * testing.T ) {
@@ -160,8 +238,8 @@ func TestConfig_AppendCA_Invalid(t *testing.T) {
160
238
}
161
239
pool := x509 .NewCertPool ()
162
240
err = conf .AppendCA (pool )
163
- require .NotNil (err )
164
- require .Contains (err .Error (), "Failed to decode CA file from pem format " )
241
+ require .Error (err )
242
+ require .Contains (err .Error (), "Failed to parse any valid certificates in CA file: " )
165
243
require .Equal (len (pool .Subjects ()), 0 )
166
244
}
167
245
}
0 commit comments