【问题标题】:Determining format of SSL certificate确定 SSL 证书的格式
【发布时间】:2014-03-13 21:52:49
【问题描述】:

我已经获得了一些 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 命令将证书从一种形式转换为另一种形式,但它们都说我的证书格式错误。

我如何知道我收到的证书是什么格式的?

【问题讨论】:

    标签: ruby-on-rails ssl https


    【解决方案1】:

    -----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 行尾的空格和可能的问题。否则,请与颁发此证书的人员联系。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 2023-04-07
    • 2015-06-23
    • 1970-01-01
    相关资源
    最近更新 更多