确定SSL证书的格式

时间:2014-03-13 21:52:49

标签: ruby-on-rails ssl https

我已获得访问一些SSL证书以安装在Rails应用程序中。但是,我无法弄清楚它们的格式,以及如何让我的应用程序使用它们。我最初设置服务器以使用一些自签名证书。除了script/rails

之外,其他地方
module Rails
    class Server < ::Rack::Server
        def default_options
            super.merge({
                :Port => 3000,
                :environment => (ENV['RAILS_ENV'] || "development").dup,
                :daemonize => false,
                :debugger => false,
                :pid => File.expand_path("tmp/pids/server.pid"),
                :config => File.expand_path("config.ru"),
                :SSLEnable => true,
                :SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE,
                :SSLPrivateKey => OpenSSL::PKey::RSA.new(
                       File.open("server.key").read),
                        # $private_key),
                :SSLCertificate => OpenSSL::X509::Certificate.new(
                       File.open("server.crt").read),
                :SSLCertName => [["CN", WEBrick::Utils::getservername]]
            })
        end
    end
end

我收到了三个文件。一个名为server.key,它只是一个普通的RSA私钥。没关系。

下一个名为server_cert.cer。它是一个32行文件,以-----BEGIN CERTIFICATE-----开头。其中的实际base64代码中包含1864个字符。我对此文件感到困惑:它看起来像是SSL证书,但我的自签名SSL证书只有24行。

我还有一个名为server_interim.cer的文件。它有三个连接在一起的证书,所有这些证书都与server_cert.cer不同。

如果我只是盲目地告诉Rails加载server_cert.cer而不是server.crt(我生成的),它会给我以下错误:

script/rails:24:in `initialize': nested asn1 error (OpenSSL::X509::CertificateError)

我已尝试运行各种openssl命令将证书从一种形式转换为另一种形式,但所有这些命令都说我的证书格式错误。

我如何确定我所获得的证书的格式是什么?

1 个答案:

答案 0 :(得分:0)

-----BEGIN CERTIFICATE-----开头且以-----END CERTIFICATE-----结尾的证书采用PEM格式。介于两者之间的是DER格式的证书的base64编码(通常以64个字符的行分割)。

证书本身遵循ASN.1结构,您通常不需要手动处理。

您无法真正比​​较尺寸,因为证书的大小取决于其中包含的信息。通常,使用openssl x509 -text -noout -in YOURFILENAME应该为您提供人类可读的证书表示。 (对于非PEM,请使用其他-inform ....参数。)

通常,.cer用于二进制DER格式,而.pem.crt用于PEM格式。情况并非总是如此(显然不是您的示例中的情况)。

某些PEM文件可能包含多个证书,通常用于表示链。一般惯例(由许多工具预期)是使证书后面跟着它的发行者的证书(当你在文件中按顺序读取它们时,cert [n]由cert [n + 1]发布)。 (情况并非总是如此,特别是当文件中的多个证书不代表链时。)

您的server_interim.cer可能是中间证书链,在您使用server_cert.cer修复问题后,您需要配置该链。

我试试openssl x509 -text -noout -in server_cert.cer。如果它抛出错误,您的文件可能已经被破坏了。我会检查DOS / UNIX行结尾的空格和可能的问题。否则,请与颁发此证书的人重新联系。