那些证书相关的玩意儿(SSL,X.509,)

那些与证书相关的东西(SSL、X.509、PEM、DER、CRT、CER、KEY、CSR、P12 等)

如果你之前没有接触过证书加密,那么这些与证书相关的概念真的很棘手,因为突然之间出现了很多新术语,它们似乎来自另一个领域,而不是我们熟悉的编程领域。那些东西,至少我个人是这么觉得的,我也想了半天不明白。写这篇文章的目的就是要理清这些概念,理解它们的含义和关联,以及一些基本的操作。

SSL

SSL – Secure Sockets Layer,现在应该叫“TLS”,但由于习惯,我们还是多叫它“SSL”。http协议默认不加密内容,所以在传输内容的时候很可能会被别人监听,所以对于安全性要求高的场合,一定要加密。HTTPS是带有加密的HTTP协议,HTTPS的加密是基于SSL的。它进行了比较底层的加密,也就是加密前,你的服务器程序在做什么,加密后也在做什么,不用去碰,这个加密对用户和开发者都是透明的。更多:[维基百科]

OpenSSL – 简单地说,OpenSSL 是 SSL 的一种实现,而 SSL 只是一个规范。理论上 SSL 的规范是安全的,目前的技术水平很难破解,但 SSL 的实现可能存在一些漏洞,比如著名的“心脏出血”。OpenSSL 还提供了很多强大的工具,强大到我们 90% 都不用。

证书标准

X.509 – 这是一个证书标准,主要定义证书中应包含的内容。有关详细信息,请参阅 SSL 使用的证书标准 RFC5280。

编码格式

同一个 X.509 证书可能有不同的编码格式。目前有以下两种编码格式。

PEM – 隐私增强邮件,打开查看文本格式。以“—–BEGIN…”开头,以“—–END…”结尾,内容为BASE64编码。

查看PEM格式证书信息:openssl x509 -in certificate.pem -text -noout

Apache 和 *NIX 服务器更喜欢这种编码格式。

DER – Distinguished Encoding Rules,打开查看二进制格式,不可读。

查看DER格式证书信息:openssl x509 -in certificate.der -inform der -text -noout

Java 和 Windows 服务器更喜欢这种编码格式。

相关文件扩展名

这有点误导。虽然我们已经知道有PEM和DER两种编码格式,但文件扩展名不一定叫“PEM”或“DER”。常见的扩展是 PEM 和 DER。有以下这些,除了编码格式可能不同外,内容也不同,但大部分都可以相互转换编码格式。

CRT——CRT应该是certificate的三个字母,其实就是certificate的意思。它通常用于*NIX 系统。它可能是 PEM 编码或 DER 编码。其中大部分应该是PEM编码。相信你已经知道如何区分了。

CER——或者证书,或者证书,常见于Windows系统,同理,可能是PEM编码,也可能是DER编码,大部分应该是DER编码。

KEY——通常用来存放公钥或者私钥,不是X.509证书,编码是一样的,可能是PEM或者DER。

查看KEY的方式:openssl rsa -in mykey.key -text -noout

如果是DER格式,应该也是这样:openssl rsa -in mykey.key -text -noout -inform der

CSR – Certificate Signing Request,即证书签名请求。这不是证书,而是从权威证书颁发机构获取签名证书的应用程序。它的核心内容是一个公钥(当然,还附上了一些其他的信息)。申请的时候也会生成一个私钥,私钥要自己保管。做过iOS APP的朋友应该知道如何向苹果申请开发者证书。

检查方式:openssl req -noout -text -in my.csr(如果是DER格式,照常加-inform der,这里就不写了)

PFX/P12 – PKCS#12 的前身图纸上的ssl是什么意思,对于 *nix 服务器,CRT 和 KEY 通常存储在单独的文件中,但 Windows 上的 IIS 将它们存储在 PFX 文件中,(因此该文件包含证书和私钥)将是不安全?不,PFX 通常有一个“提取密码”。如果您想阅读内容,它会要求您提供提取密码。PFX 使用 DER 编码。如何将 PFX 转换为 PEM 编码?

openssl pkcs12 -in for-iis.pfx -out for-iis.pem -nodes

这次将提示您输入提取码。for-iis.pem 是可读文本。

生成 pfx 的命令如下所示: openssl pkcs12 -export -in certificate.crt -inkey privateKey.key -out certificate.pfx -certfile CACert.crt

其中,CACert.crt是CA(权威认证机构)的根证书,有的也是通过-certfile参数引入的。这样一来,PFX 实际上就是一个证书密钥库。

JKS – Java Key Storage,是Java的专利,与OpenSSL关系不大。使用 Java 中称为“keytool”的工具,可以将 PFX 转换为 JKS。当然keytool也可以直接生成JKS,不过这里就不多说了。

证书编码转换

PEM 到 DER openssl x509 -in cert.crt -outform der -out cert.der

DER 到 PEM openssl x509 -in cert.crt -inform der -outform pem -out cert.pem

(提示:转换KEY文件类似,只需将x509替换为rsa即可,如果要转换CSR,请将x509替换为req…)

获取证书

向权威证书颁发机构申请证书

使用以下命令生成 csr: openssl req -newkey rsa:2048 -new -nodes -keyout my.key -out my.csr

将 csr 交给权威认证机构,权威认证机构会签名并完成。保留csr。当权威证书颁发机构颁发的证书过期时,也可以使用同一个csr申请新的证书,key常量。

或生成自签名证书

openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem

在生成证书的过程中,会要求你填写很多东西。其实只需要填写Common Name图纸上的ssl是什么意思,通常是你的服务器的域名,比如“yourcompany.com”,或者你的服务器的IP地址,其他都可以不填。的。

不要在生产环境中使用自签名证书,否则浏览器将无法识别,或者如果你是企业应用程序,可以强制用户的浏览器接受你的自签名证书。向权威机构索取证书通常需要花钱,但现在也有免费的,只需要简单的域名验证。

从:

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论