Skip to content
  • Kazuki Yamaguchi's avatar
    a01daab6
    [ruby/openssl] x509, ssl, pkcs7: try to parse as DER-encoding first · a01daab6
    Kazuki Yamaguchi authored
    Methods that take both PEM-encoding and DER-encoding have not been
    consistent in the order in which encoding to attempt to parse.
    
    A DER-encoding may contain a valid PEM block ("\n-----BEGIN ..-----" to
    "-----END ...-----") embedded within it. Also, the PEM-encoding parser
    allows arbitrary data around the PEM block and silently skips it. As a
    result, attempting to parse data in DER-encoding as PEM-encoding first
    can incorrectly finds the embedded PEM block instead.
    
    This commit ensures that DER encoding will always be attempted before
    PEM encoding. OpenSSL::X509::Certificate is one of the updated classes.
    With this, the following will always be true:
    
        # obj is an OpenSSL::X509::Certificate
        obj == OpenSSL::X509::Certificate.new(obj.to_der)
        obj == OpenSSL::X509::Certificate.new(obj.to_pem)
    
    https://github.com/ruby/openssl/commit/b280eb1fd0
    a01daab6
    [ruby/openssl] x509, ssl, pkcs7: try to parse as DER-encoding first
    Kazuki Yamaguchi authored
    Methods that take both PEM-encoding and DER-encoding have not been
    consistent in the order in which encoding to attempt to parse.
    
    A DER-encoding may contain a valid PEM block ("\n-----BEGIN ..-----" to
    "-----END ...-----") embedded within it. Also, the PEM-encoding parser
    allows arbitrary data around the PEM block and silently skips it. As a
    result, attempting to parse data in DER-encoding as PEM-encoding first
    can incorrectly finds the embedded PEM block instead.
    
    This commit ensures that DER encoding will always be attempted before
    PEM encoding. OpenSSL::X509::Certificate is one of the updated classes.
    With this, the following will always be true:
    
        # obj is an OpenSSL::X509::Certificate
        obj == OpenSSL::X509::Certificate.new(obj.to_der)
        obj == OpenSSL::X509::Certificate.new(obj.to_pem)
    
    https://github.com/ruby/openssl/commit/b280eb1fd0
Loading