Skip to content

Inconsistent handling of internal state in CRL #163

Open
@pcarlisle

Description

@pcarlisle

I have the following code

      crl = OpenSSL::X509::CRL.new
      crl.version = 1
      crl.issuer = ca_cert.subject

      ef = extension_factory_for(ca_cert)
      crl.add_extension(
        ef.create_extension(["authorityKeyIdentifier", "keyid:always", false]))
      crl.add_extension(
        OpenSSL::X509::Extension.new("crlNumber", OpenSSL::ASN1::Integer(0)))

      not_before = just_now
      crl.last_update = not_before
      crl.next_update = not_before + FIVE_YEARS
      crl.sign(ca_key, DEFAULT_SIGNING_DIGEST)
      binding.pry

At this breakpoint I get

[11] pry(PuppetSpec::SSL)> crl
=> #<OpenSSL::X509::CRL:0xfb0a08c>
[12] pry(PuppetSpec::SSL)> crl.to_pem
=> "-----BEGIN X509 CRL-----\nMAA=\n-----END X509 CRL-----\n"
[13] pry(PuppetSpec::SSL)> OpenSSL::X509::CRL.new(crl.to_pem)
OpenSSL::X509::CRLError: java.lang.IllegalArgumentException: sequence wrong size for CertificateList
from org/jruby/ext/openssl/X509CRL.java:221:in `initialize'
[14] pry(PuppetSpec::SSL)> OpenSSL::X509::CRL.new(crl.to_der).to_pem
=> "-----BEGIN X509 CRL-----\nMIIBkDB6AgEBMA0GCSqGSIb3DQEBCwUAMBcxFTATBgNVBAMMDHJvb3QtY2Et8KCc\njhcNMTgwNTA0MjIxNDU5WhcNMjMwNTAzMjIxNDU5WqAvMC0wHwYDVR0jBBgwFoAU\nE4P3BleD1/3tVw5gc5IF9o/5H9kwCgYDVR0UBAMCAQAwDQYJKoZIhvcNAQELBQAD\nggEBAFgkbu65QLWwxHSyPw24StD9EFhHkbYX2pXq+FnS9RNSFpV9RJg1R4rOdfHe\n7xhIWO8milyKsAgTE2s1I2o+RXzH4Gaq2FFWc48f5ZXRUWqhNb8Dd8yuTbiTkqOl\n3ZuMfJUUzk0DBPKjn665AGYKRcQ5Jeaw3s8VSST/p3wzLNnCM1Dn39zvPKXJ1oQF\nAI8vkXgTg9tBOoSe1ENe6AJJnzn3hU8E3SXc457Azifz4w+ShRsxzvb1pjRXSVQ+\ny3WKN2X1z646sYx5bXMDTXhXUTo1aL9t12BpGbfHJom586AtOSV5lchnkgyb8eVl\nHOUhMoTwG0RaEfhIyQ1UN1VJk2U=\n-----END X509 CRL-----\n"
[15] pry(PuppetSpec::SSL)> OpenSSL::X509::CRL.new(OpenSSL::X509::CRL.new(crl.to_der).to_pem)
=> #<OpenSSL::X509::CRL:0xb61edb9>

It seems that internally the crl should be either in crl or crlHolder, and to_der will check both but to_pem will only check crl. When I initialize a new object from an existing crl it initializes crl internally, but when calling new with no arguments it doesn't initialize anything (sign initializes crlHolder but sets crl to null).

This is also seen by:

[16] pry(PuppetSpec::SSL)> OpenSSL::X509::CRL.new.to_der
Java::JavaLang::IllegalStateException: no crl holder
from org.jruby.ext.openssl.X509CRL.getCRL(X509CRL.java:140)

I'm on jruby 9.1.16.0.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions