我已获得访问一些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
命令将证书从一种形式转换为另一种形式,但所有这些命令都说我的证书格式错误。
我如何确定我所获得的证书的格式是什么?
答案 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行结尾的空格和可能的问题。否则,请与颁发此证书的人重新联系。