Skip to content

Commit 3f31054

Browse files
committed
x509: update keys used in tests
Replace fixed-sized RSA keys with the generic rsa-{1,2,3}.pem keys. Those test cases do not depend on specific keys or key sizes, and just need several different keys. Replace DSA keys with EC keys so that we can run more tests in the FIPS mode, which do not seem to support DSA anymore. Also, clean up duplicate test cases using very small keys or obsolete hash functions. rake test_fips no longer skips those test cases.
1 parent 82e80ee commit 3f31054

File tree

5 files changed

+122
-231
lines changed

5 files changed

+122
-231
lines changed

Rakefile

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,6 @@ Rake::TestTask.new(:test_fips_internal) do |t|
3535
'test/openssl/test_ocsp.rb',
3636
'test/openssl/test_pkcs12.rb',
3737
'test/openssl/test_ts.rb',
38-
'test/openssl/test_x509cert.rb',
39-
'test/openssl/test_x509crl.rb',
40-
'test/openssl/test_x509name.rb',
41-
'test/openssl/test_x509req.rb',
4238
]
4339
t.warning = true
4440
end

test/openssl/test_x509cert.rb

Lines changed: 54 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,16 @@
66
class OpenSSL::TestX509Certificate < OpenSSL::TestCase
77
def setup
88
super
9-
@rsa1024 = Fixtures.pkey("rsa1024")
10-
@rsa2048 = Fixtures.pkey("rsa2048")
11-
@dsa256 = Fixtures.pkey("dsa256")
12-
@dsa512 = Fixtures.pkey("dsa512")
9+
@rsa1 = Fixtures.pkey("rsa-1")
10+
@rsa2 = Fixtures.pkey("rsa-2")
11+
@ec1 = Fixtures.pkey("p256")
1312
@ca = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=CA")
1413
@ee1 = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=EE1")
1514
end
1615

1716
def test_serial
1817
[1, 2**32, 2**100].each{|s|
19-
cert = issue_cert(@ca, @rsa2048, s, [], nil, nil)
18+
cert = issue_cert(@ca, @rsa1, s, [], nil, nil)
2019
assert_equal(s, cert.serial)
2120
cert = OpenSSL::X509::Certificate.new(cert.to_der)
2221
assert_equal(s, cert.serial)
@@ -29,40 +28,34 @@ def test_public_key
2928
["subjectKeyIdentifier","hash",false],
3029
["authorityKeyIdentifier","keyid:always",false],
3130
]
32-
33-
[
34-
@rsa1024, @rsa2048, @dsa256, @dsa512,
35-
].each{|pk|
36-
cert = issue_cert(@ca, pk, 1, exts, nil, nil)
37-
assert_equal(cert.extensions.sort_by(&:to_s)[2].value,
38-
OpenSSL::TestUtils.get_subject_key_id(cert))
39-
cert = OpenSSL::X509::Certificate.new(cert.to_der)
40-
assert_equal(cert.extensions.sort_by(&:to_s)[2].value,
41-
OpenSSL::TestUtils.get_subject_key_id(cert))
42-
}
31+
cert = issue_cert(@ca, @rsa1, 1, exts, nil, nil)
32+
assert_kind_of(OpenSSL::PKey::RSA, cert.public_key)
33+
assert_equal(@rsa1.public_to_der, cert.public_key.public_to_der)
34+
cert = OpenSSL::X509::Certificate.new(cert.to_der)
35+
assert_equal(@rsa1.public_to_der, cert.public_key.public_to_der)
4336
end
4437

4538
def test_validity
4639
now = Time.at(Time.now.to_i + 0.9)
47-
cert = issue_cert(@ca, @rsa2048, 1, [], nil, nil,
40+
cert = issue_cert(@ca, @rsa1, 1, [], nil, nil,
4841
not_before: now, not_after: now+3600)
4942
assert_equal(Time.at(now.to_i), cert.not_before)
5043
assert_equal(Time.at(now.to_i+3600), cert.not_after)
5144

5245
now = Time.at(now.to_i)
53-
cert = issue_cert(@ca, @rsa2048, 1, [], nil, nil,
46+
cert = issue_cert(@ca, @rsa1, 1, [], nil, nil,
5447
not_before: now, not_after: now+3600)
5548
assert_equal(now.getutc, cert.not_before)
5649
assert_equal((now+3600).getutc, cert.not_after)
5750

5851
now = Time.at(0)
59-
cert = issue_cert(@ca, @rsa2048, 1, [], nil, nil,
52+
cert = issue_cert(@ca, @rsa1, 1, [], nil, nil,
6053
not_before: now, not_after: now)
6154
assert_equal(now.getutc, cert.not_before)
6255
assert_equal(now.getutc, cert.not_after)
6356

6457
now = Time.at(0x7fffffff)
65-
cert = issue_cert(@ca, @rsa2048, 1, [], nil, nil,
58+
cert = issue_cert(@ca, @rsa1, 1, [], nil, nil,
6659
not_before: now, not_after: now)
6760
assert_equal(now.getutc, cert.not_before)
6861
assert_equal(now.getutc, cert.not_after)
@@ -75,7 +68,7 @@ def test_extension_factory
7568
["subjectKeyIdentifier","hash",false],
7669
["authorityKeyIdentifier","issuer:always,keyid:always",false],
7770
]
78-
ca_cert = issue_cert(@ca, @rsa2048, 1, ca_exts, nil, nil)
71+
ca_cert = issue_cert(@ca, @rsa1, 1, ca_exts, nil, nil)
7972
ca_cert.extensions.each_with_index{|ext, i|
8073
assert_equal(ca_exts[i].first, ext.oid)
8174
assert_equal(ca_exts[i].last, ext.critical?)
@@ -88,7 +81,7 @@ def test_extension_factory
8881
["extendedKeyUsage","clientAuth, emailProtection, codeSigning",false],
8982
["subjectAltName","email:ee1@ruby-lang.org",false],
9083
]
91-
ee1_cert = issue_cert(@ee1, @rsa1024, 2, ee1_exts, ca_cert, @rsa2048)
84+
ee1_cert = issue_cert(@ee1, @rsa2, 2, ee1_exts, ca_cert, @rsa1)
9285
assert_equal(ca_cert.subject.to_der, ee1_cert.issuer.to_der)
9386
ee1_cert.extensions.each_with_index{|ext, i|
9487
assert_equal(ee1_exts[i].first, ext.oid)
@@ -97,39 +90,39 @@ def test_extension_factory
9790
end
9891

9992
def test_akiski
100-
ca_cert = generate_cert(@ca, @rsa2048, 4, nil)
93+
ca_cert = generate_cert(@ca, @rsa1, 4, nil)
10194
ef = OpenSSL::X509::ExtensionFactory.new(ca_cert, ca_cert)
10295
ca_cert.add_extension(
10396
ef.create_extension("subjectKeyIdentifier", "hash", false))
10497
ca_cert.add_extension(
10598
ef.create_extension("authorityKeyIdentifier", "issuer:always,keyid:always", false))
106-
ca_cert.sign(@rsa2048, "sha256")
99+
ca_cert.sign(@rsa1, "sha256")
107100

108101
ca_keyid = get_subject_key_id(ca_cert.to_der, hex: false)
109102
assert_equal ca_keyid, ca_cert.authority_key_identifier
110103
assert_equal ca_keyid, ca_cert.subject_key_identifier
111104

112-
ee_cert = generate_cert(@ee1, Fixtures.pkey("p256"), 5, ca_cert)
105+
ee_cert = generate_cert(@ee1, @rsa2, 5, ca_cert)
113106
ef = OpenSSL::X509::ExtensionFactory.new(ca_cert, ee_cert)
114107
ee_cert.add_extension(
115108
ef.create_extension("subjectKeyIdentifier", "hash", false))
116109
ee_cert.add_extension(
117110
ef.create_extension("authorityKeyIdentifier", "issuer:always,keyid:always", false))
118-
ee_cert.sign(@rsa2048, "sha256")
111+
ee_cert.sign(@rsa1, "sha256")
119112

120113
ee_keyid = get_subject_key_id(ee_cert.to_der, hex: false)
121114
assert_equal ca_keyid, ee_cert.authority_key_identifier
122115
assert_equal ee_keyid, ee_cert.subject_key_identifier
123116
end
124117

125118
def test_akiski_missing
126-
cert = issue_cert(@ee1, @rsa2048, 1, [], nil, nil)
119+
cert = issue_cert(@ee1, @rsa1, 1, [], nil, nil)
127120
assert_nil(cert.authority_key_identifier)
128121
assert_nil(cert.subject_key_identifier)
129122
end
130123

131124
def test_crl_uris_no_crl_distribution_points
132-
cert = issue_cert(@ee1, @rsa2048, 1, [], nil, nil)
125+
cert = issue_cert(@ee1, @rsa1, 1, [], nil, nil)
133126
assert_nil(cert.crl_uris)
134127
end
135128

@@ -141,10 +134,10 @@ def test_crl_uris
141134
URI.1 = http://www.example.com/crl
142135
URI.2 = ldap://ldap.example.com/cn=ca?certificateRevocationList;binary
143136
_cnf_
144-
cdp_cert = generate_cert(@ee1, @rsa2048, 3, nil)
137+
cdp_cert = generate_cert(@ee1, @rsa1, 3, nil)
145138
ef.subject_certificate = cdp_cert
146139
cdp_cert.add_extension(ef.create_extension("crlDistributionPoints", "@crlDistPts"))
147-
cdp_cert.sign(@rsa2048, "sha256")
140+
cdp_cert.sign(@rsa1, "sha256")
148141
assert_equal(
149142
["http://www.example.com/crl", "ldap://ldap.example.com/cn=ca?certificateRevocationList;binary"],
150143
cdp_cert.crl_uris
@@ -158,10 +151,10 @@ def test_crl_uris_multiple_general_names
158151
[crlDistPts_section]
159152
fullname = URI:http://www.example.com/crl, URI:ldap://ldap.example.com/cn=ca?certificateRevocationList;binary
160153
_cnf_
161-
cdp_cert = generate_cert(@ee1, @rsa2048, 3, nil)
154+
cdp_cert = generate_cert(@ee1, @rsa1, 3, nil)
162155
ef.subject_certificate = cdp_cert
163156
cdp_cert.add_extension(ef.create_extension("crlDistributionPoints", "crlDistPts_section"))
164-
cdp_cert.sign(@rsa2048, "sha256")
157+
cdp_cert.sign(@rsa1, "sha256")
165158
assert_equal(
166159
["http://www.example.com/crl", "ldap://ldap.example.com/cn=ca?certificateRevocationList;binary"],
167160
cdp_cert.crl_uris
@@ -177,22 +170,22 @@ def test_crl_uris_no_uris
177170
[dirname_section]
178171
CN = dirname
179172
_cnf_
180-
cdp_cert = generate_cert(@ee1, @rsa2048, 3, nil)
173+
cdp_cert = generate_cert(@ee1, @rsa1, 3, nil)
181174
ef.subject_certificate = cdp_cert
182175
cdp_cert.add_extension(ef.create_extension("crlDistributionPoints", "crlDistPts_section"))
183-
cdp_cert.sign(@rsa2048, "sha256")
176+
cdp_cert.sign(@rsa1, "sha256")
184177
assert_nil(cdp_cert.crl_uris)
185178
end
186179

187180
def test_aia_missing
188-
cert = issue_cert(@ee1, @rsa2048, 1, [], nil, nil)
181+
cert = issue_cert(@ee1, @rsa1, 1, [], nil, nil)
189182
assert_nil(cert.ca_issuer_uris)
190183
assert_nil(cert.ocsp_uris)
191184
end
192185

193186
def test_aia
194187
ef = OpenSSL::X509::ExtensionFactory.new
195-
aia_cert = generate_cert(@ee1, @rsa2048, 4, nil)
188+
aia_cert = generate_cert(@ee1, @rsa1, 4, nil)
196189
ef.subject_certificate = aia_cert
197190
aia_cert.add_extension(
198191
ef.create_extension(
@@ -204,7 +197,7 @@ def test_aia
204197
false
205198
)
206199
)
207-
aia_cert.sign(@rsa2048, "sha256")
200+
aia_cert.sign(@rsa1, "sha256")
208201
assert_equal(
209202
["http://www.example.com/caIssuers", "ldap://ldap.example.com/cn=ca?authorityInfoAccessCaIssuers;binary"],
210203
aia_cert.ca_issuer_uris
@@ -217,7 +210,7 @@ def test_aia
217210

218211
def test_invalid_extension
219212
integer = OpenSSL::ASN1::Integer.new(0)
220-
invalid_exts_cert = generate_cert(@ee1, @rsa1024, 1, nil)
213+
invalid_exts_cert = generate_cert(@ee1, @rsa1, 1, nil)
221214
["subjectKeyIdentifier", "authorityKeyIdentifier", "crlDistributionPoints", "authorityInfoAccess"].each do |ext|
222215
invalid_exts_cert.add_extension(
223216
OpenSSL::X509::Extension.new(ext, integer.to_der)
@@ -241,82 +234,30 @@ def test_invalid_extension
241234
}
242235
end
243236

244-
def test_sign_and_verify_rsa_sha1
245-
cert = issue_cert(@ca, @rsa2048, 1, [], nil, nil, digest: "SHA1")
246-
assert_equal(false, cert.verify(@rsa1024))
247-
assert_equal(true, cert.verify(@rsa2048))
248-
assert_equal(false, certificate_error_returns_false { cert.verify(@dsa256) })
249-
assert_equal(false, certificate_error_returns_false { cert.verify(@dsa512) })
237+
def test_sign_and_verify
238+
cert = issue_cert(@ca, @rsa1, 1, [], nil, nil, digest: "SHA256")
239+
assert_equal(true, cert.verify(@rsa1))
240+
assert_equal(false, cert.verify(@rsa2))
241+
assert_equal(false, certificate_error_returns_false { cert.verify(@ec1) })
250242
cert.serial = 2
251-
assert_equal(false, cert.verify(@rsa2048))
252-
rescue OpenSSL::X509::CertificateError # RHEL 9 disables SHA1
253-
end
254-
255-
def test_sign_and_verify_rsa_md5
256-
cert = issue_cert(@ca, @rsa2048, 1, [], nil, nil, digest: "md5")
257-
assert_equal(false, cert.verify(@rsa1024))
258-
assert_equal(true, cert.verify(@rsa2048))
259-
260-
assert_equal(false, certificate_error_returns_false { cert.verify(@dsa256) })
261-
assert_equal(false, certificate_error_returns_false { cert.verify(@dsa512) })
262-
cert.subject = @ee1
263-
assert_equal(false, cert.verify(@rsa2048))
264-
rescue OpenSSL::X509::CertificateError # RHEL7 disables MD5
265-
end
266-
267-
def test_sign_and_verify_dsa
268-
cert = issue_cert(@ca, @dsa512, 1, [], nil, nil)
269-
assert_equal(false, certificate_error_returns_false { cert.verify(@rsa1024) })
270-
assert_equal(false, certificate_error_returns_false { cert.verify(@rsa2048) })
271-
assert_equal(false, cert.verify(@dsa256))
272-
assert_equal(true, cert.verify(@dsa512))
273-
cert.not_after = Time.now
274-
assert_equal(false, cert.verify(@dsa512))
243+
assert_equal(false, cert.verify(@rsa1))
275244
end
276245

277-
def test_sign_and_verify_rsa_dss1
278-
cert = issue_cert(@ca, @rsa2048, 1, [], nil, nil, digest: OpenSSL::Digest.new('DSS1'))
279-
assert_equal(false, cert.verify(@rsa1024))
280-
assert_equal(true, cert.verify(@rsa2048))
281-
assert_equal(false, certificate_error_returns_false { cert.verify(@dsa256) })
282-
assert_equal(false, certificate_error_returns_false { cert.verify(@dsa512) })
283-
cert.subject = @ee1
284-
assert_equal(false, cert.verify(@rsa2048))
285-
rescue OpenSSL::X509::CertificateError
286-
end if defined?(OpenSSL::Digest::DSS1)
287-
288-
def test_sign_and_verify_dsa_md5
289-
assert_raise(OpenSSL::X509::CertificateError){
290-
issue_cert(@ca, @dsa512, 1, [], nil, nil, digest: "md5")
291-
}
292-
end
293-
294-
def test_sign_and_verify_ed25519
246+
def test_sign_and_verify_nil_digest
295247
# Ed25519 is not FIPS-approved.
296248
omit_on_fips
297249
ed25519 = OpenSSL::PKey::generate_key("ED25519")
298250
cert = issue_cert(@ca, ed25519, 1, [], nil, nil, digest: nil)
299251
assert_equal(true, cert.verify(ed25519))
300252
end
301253

302-
def test_dsa_with_sha2
303-
cert = issue_cert(@ca, @dsa256, 1, [], nil, nil, digest: "sha256")
304-
assert_equal("dsa_with_SHA256", cert.signature_algorithm)
305-
# TODO: need more tests for dsa + sha2
306-
307-
# SHA1 is allowed from OpenSSL 1.0.0 (0.9.8 requires DSS1)
308-
cert = issue_cert(@ca, @dsa256, 1, [], nil, nil, digest: "sha1")
309-
assert_equal("dsaWithSHA1", cert.signature_algorithm)
310-
rescue OpenSSL::X509::CertificateError # RHEL 9 disables SHA1
311-
end
312-
313254
def test_check_private_key
314-
cert = issue_cert(@ca, @rsa2048, 1, [], nil, nil)
315-
assert_equal(true, cert.check_private_key(@rsa2048))
255+
cert = issue_cert(@ca, @rsa1, 1, [], nil, nil)
256+
assert_equal(true, cert.check_private_key(@rsa1))
316257
end
317258

318259
def test_read_from_file
319-
cert = issue_cert(@ca, @rsa2048, 1, [], nil, nil)
260+
cert = issue_cert(@ca, @rsa1, 1, [], nil, nil)
320261
Tempfile.create("cert") { |f|
321262
f << cert.to_pem
322263
f.rewind
@@ -325,28 +266,28 @@ def test_read_from_file
325266
end
326267

327268
def test_read_der_then_pem
328-
cert1 = issue_cert(@ca, @rsa2048, 1, [], nil, nil)
269+
cert1 = issue_cert(@ca, @rsa1, 1, [], nil, nil)
329270
exts = [
330271
# A new line before PEM block
331272
["nsComment", "Another certificate:\n" + cert1.to_pem],
332273
]
333-
cert2 = issue_cert(@ca, @rsa2048, 2, exts, nil, nil)
274+
cert2 = issue_cert(@ca, @rsa1, 2, exts, nil, nil)
334275

335276
assert_equal cert2, OpenSSL::X509::Certificate.new(cert2.to_der)
336277
assert_equal cert2, OpenSSL::X509::Certificate.new(cert2.to_pem)
337278
end
338279

339280
def test_eq
340281
now = Time.now
341-
cacert = issue_cert(@ca, @rsa1024, 1, [], nil, nil,
282+
cacert = issue_cert(@ca, @rsa1, 1, [], nil, nil,
342283
not_before: now, not_after: now + 3600)
343-
cert1 = issue_cert(@ee1, @rsa2048, 2, [], cacert, @rsa1024,
284+
cert1 = issue_cert(@ee1, @rsa2, 2, [], cacert, @rsa1,
344285
not_before: now, not_after: now + 3600)
345-
cert2 = issue_cert(@ee1, @rsa2048, 2, [], cacert, @rsa1024,
286+
cert2 = issue_cert(@ee1, @rsa2, 2, [], cacert, @rsa1,
346287
not_before: now, not_after: now + 3600)
347-
cert3 = issue_cert(@ee1, @rsa2048, 3, [], cacert, @rsa1024,
288+
cert3 = issue_cert(@ee1, @rsa2, 3, [], cacert, @rsa1,
348289
not_before: now, not_after: now + 3600)
349-
cert4 = issue_cert(@ee1, @rsa2048, 2, [], cacert, @rsa1024,
290+
cert4 = issue_cert(@ee1, @rsa2, 2, [], cacert, @rsa1,
350291
digest: "sha512", not_before: now, not_after: now + 3600)
351292

352293
assert_equal false, cert1 == 12345
@@ -358,9 +299,9 @@ def test_eq
358299

359300
def test_marshal
360301
now = Time.now
361-
cacert = issue_cert(@ca, @rsa1024, 1, [], nil, nil,
302+
cacert = issue_cert(@ca, @rsa1, 1, [], nil, nil,
362303
not_before: now, not_after: now + 3600)
363-
cert = issue_cert(@ee1, @rsa2048, 2, [], cacert, @rsa1024,
304+
cert = issue_cert(@ee1, @rsa2, 2, [], cacert, @rsa1,
364305
not_before: now, not_after: now + 3600)
365306
deserialized = Marshal.load(Marshal.dump(cert))
366307

@@ -378,8 +319,8 @@ def test_load_file_empty_pem
378319
end
379320

380321
def test_load_file_fullchain_pem
381-
cert1 = issue_cert(@ee1, @rsa2048, 1, [], nil, nil)
382-
cert2 = issue_cert(@ca, @rsa2048, 1, [], nil, nil)
322+
cert1 = issue_cert(@ee1, @rsa1, 1, [], nil, nil)
323+
cert2 = issue_cert(@ca, @rsa2, 1, [], nil, nil)
383324

384325
Tempfile.create("fullchain.pem") do |f|
385326
f.puts cert1.to_pem
@@ -394,7 +335,7 @@ def test_load_file_fullchain_pem
394335
end
395336

396337
def test_load_file_certificate_der
397-
cert = issue_cert(@ca, @rsa2048, 1, [], nil, nil)
338+
cert = issue_cert(@ca, @rsa1, 1, [], nil, nil)
398339
Tempfile.create("certificate.der", binmode: true) do |f|
399340
f.write cert.to_der
400341
f.close
@@ -419,7 +360,7 @@ def test_load_file_fullchain_garbage
419360
end
420361

421362
def test_tbs_precert_bytes
422-
cert = issue_cert(@ca, @rsa2048, 1, [], nil, nil)
363+
cert = issue_cert(@ca, @rsa1, 1, [], nil, nil)
423364
seq = OpenSSL::ASN1.decode(cert.tbs_bytes)
424365

425366
assert_equal 7, seq.value.size

0 commit comments

Comments
 (0)