Skip to content

Commit 149001d

Browse files
committed
[fix] authority keyid extension's :always part optional
resolves #174
1 parent 8b84a40 commit 149001d

File tree

2 files changed

+38
-3
lines changed

2 files changed

+38
-3
lines changed

src/main/java/org/jruby/ext/openssl/X509ExtensionFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -404,11 +404,11 @@ private ASN1Sequence parseAuthorityKeyIdentifier(final ThreadContext context, fi
404404
final ASN1EncodableVector vec = new ASN1EncodableVector();
405405

406406
for ( String value : valuex.split(",") ) { // e.g. "keyid:always,issuer:always"
407-
if ( value.startsWith("keyid:") ) { // keyid:always
407+
if ( value.startsWith("keyid") ) { // keyid[:always]
408408
ASN1Encodable publicKeyIdentifier = new DEROctetString(issuerPublicKeyIdentifier(context));
409409
vec.add(new DERTaggedObject(false, 0, publicKeyIdentifier));
410410
}
411-
else if ( value.startsWith("issuer:") ) { // issuer:always
411+
else if ( value.startsWith("issuer") ) { // issuer[:always]
412412
GeneralName issuerName = new GeneralName(authorityCertIssuer(context));
413413
vec.add(new DERTaggedObject(false, 1, new GeneralNames(issuerName)));
414414

src/test/ruby/x509/test_x509ext.rb

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ def test_subject_alt_name_sign_to_pem
191191

192192
csr.sign rsa_key, OpenSSL::Digest::SHA256.new
193193

194-
puts csr.to_text if $VERBOSE
194+
puts csr.to_text if $DEBUG
195195

196196
csr = OpenSSL::X509::Request.new pem = csr.to_pem
197197
assert_equal 2, csr.attributes.length
@@ -236,6 +236,41 @@ def test_subject_alt_name_sequence
236236
}
237237
end
238238

239+
def test_authority_key_identifier
240+
cn = [ %w[CN localhost] ]
241+
# key = OpenSSL::PKey::RSA.new TEST_KEY_RSA2048
242+
key = Fixtures.pkey("dsa512") # DSA
243+
cert = OpenSSL::X509::Certificate.new
244+
cert.version = 2
245+
cert.serial = 1
246+
name = OpenSSL::X509::Name.new(cn)
247+
cert.subject = name
248+
cert.issuer = name # self-signed
249+
cert.not_before = Time.now
250+
cert.not_after = Time.now + (365*24*60*60)
251+
cert.public_key = key.public_key
252+
253+
ef = OpenSSL::X509::ExtensionFactory.new(nil, cert)
254+
ef.issuer_certificate = cert
255+
cert.extensions = [
256+
ef.create_extension("basicConstraints","CA:FALSE"),
257+
ef.create_extension("subjectKeyIdentifier", "hash"),
258+
#ef.create_extension("extendedKeyUsage", "serverAuth"),
259+
ef.create_extension("nsComment", __method__.to_s),
260+
]
261+
262+
ext = ef.create_extension("authorityKeyIdentifier", "keyid")
263+
cert.add_extension(ext)
264+
265+
assert_equal 4, cert.extensions.size
266+
267+
ext = cert.extensions.last
268+
assert_equal keyid = "keyid:91:0D:0C:A9:43:73:DF:8C:A9:E3:C2:0A:05:E3:CF:BE:A7:38:8D:DD\n", ext.value
269+
assert !ext.critical?
270+
assert_equal [ "authorityKeyIdentifier", keyid, false ], ext.to_a
271+
# cert.sign(key, OpenSSL::Digest::SHA1.new)
272+
end
273+
239274
def subject_alt_name(domains)
240275
ef = OpenSSL::X509::ExtensionFactory.new
241276
ef.create_extension("subjectAltName", domains.split(',').map { |d| "DNS: #{d}" }.join(','))

0 commit comments

Comments
 (0)