Skip to content

Invalid CSR when initialized from a decoded base64 string #150

Closed
@mkarklins

Description

@mkarklins
require 'openssl'
require 'base64'

# Build the CSR
key = OpenSSL::PKey::RSA.new(1024)
request = OpenSSL::X509::Request.new
request.subject = OpenSSL::X509::Name.new([['CN', "common_name",  OpenSSL::ASN1::UTF8STRING]])
request.public_key = key.public_key
request.sign(key, OpenSSL::Digest::SHA1.new)

# One request is decoded from a `encode64` the other one is from `strict_encode64`
decoded = Base64.decode64(Base64.encode64(request.to_der))
strictly_decoded = Base64.decode64(Base64.strict_encode64(request.to_der))

# Both strings are decoded identically
decoded == strictly_decoded #=> true
# .. even on byte level
decoded.split(//) == strictly_decoded.split(//) #= true

OpenSSL::X509::Request.new(decoded) #=> OpenSSL::X509::RequestError: invalid certificate request data
OpenSSL::X509::Request.new(strictly_decoded) #=> #<OpenSSL::X509::Request:0x4f290f46>

Not sure if this is strictly jruby-openssl issue, but how is it possible that two equal strings produce different results?

Environment:
jruby-9.1.13.0
MacOS Sierra 10.12.6
OpenSSL 0.9.8zh 14 Jan 2016
java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)

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