2019-02-28 02:06:46   

openssl PKCS
X.509这是一种证书标准,主要定义了证书中应该包含哪些内容.其详情可以参考RFC5280,SSL使用的就是这种证书标准. #### 一、存储格式 DER `DER:Distinguished Encoding Rules(可辨别编码规则),是ASN.1的一种。 ASN.1:Abstract Syntax Notation One(抽象语法标记),ASN.1是一种 ISO/ITU-T 标准,描述了一种对数据进行表示、编码、传输和解码的数据格式。它提供了一整套正规的格式用于描述对象的结构,而不管语言上如何执行及这些数据的具体指代,也不用去管到底是什么样的应用程序。 证书信息一般以二进制的DER格式存储在文件中以供RSA,SSL使用` PEM `DER一般是二进制文件形式存储,打印性较差,因此对DER内容进行base64编码,并补充说明key类型的头和尾就构成了PEM` 因此PEM,DER实质内容是相同的。 查看PEM格式证书 ```bash $ openssl x509 -in certificate.crt -text -noout ``` 查看DER格式证书 ```bash $ openssl x509 -in certificate.der -inform der -text -noout ```    证书编码的转换(转换KEY文件,把x509换成rsa,转换CSR文件,把x509换成req)   pem转为der ```bash $ openssl x509 -in cert.crt -outform der -out cert.der ``` der转为pem ```bash $ openssl x509 -in cert.crt -inform der -outform pem -out cert.pem ```    #### 二、公钥密码学标准 key以一定的结构存储的,不同的结构,补充的元信息也不同主要有两种组织形式PKCS#1,PKCS#8,PKCS#12 PKCS#1 `RSA密码编译标准(RSA Cryptography Standard)` 定义了RSA的数理基础、公/私钥格式,以及加/解密、签/验章的流程。1.5版本曾经遭到攻击[1]。 PKCS#8 `私钥消息表示标准(Private-Key Information Syntax Standard)` Apache读取证书私钥的标准。 PKCS#12 `个人消息交换标准(Personal Information Exchange Syntax Standard)` 定义了包含私钥与公钥证书(public key certificate)的文件格式。私钥采密码(password)保护。常见的PFX就履行了PKCS#12。      #### 生成pkcs#1格式的私钥 ```bash $ openssl genrsa -out private_key.pem 1024 ``` #### 从私钥导出pkcs#8公钥 ```bash $ openssl rsa -in private_key.pem -pubout -out public_key.pem ``` #### 转换私钥格式 `pkcs#1 -> pkcs#8` ```bash $ openssl pkcs8 -topk8 -inform PEM -in private.key -outform pem -nocrypt -out pkcs8.pem ``` #### 转换私钥格式 `pkcs#8 -> pkcs#1` ```bash $ openssl pkcs8 -in pkcs8.pem -nocrypt -out pri_key.pem ``` #### 转换公钥格式 `pkcs#8 -> pkcs#1` ```bash $ openssl rsa -pubin -in public_key.pem -RSAPublicKey_out -out pkcs1_public_key.pem ```    #### 三、相关的文件扩展名 CRT `CRT应该是certificate的三个字母,其实还是证书的意思,常见于*NIX系统,有可能是PEM编码,也有可能是DER编码,大多数应该是PEM编码,相信你已经知道怎么辨别.` CER `还是certificate,还是证书,常见于Windows系统,同样的,可能是PEM编码,也可能是DER编码,大多数应该是DER编码.证书中没有私钥,DER 编码二进制格式的证书文件` KEY `通常用来存放一个公钥或者私钥,并非X.509证书,编码同样的,可能是PEM,也可能是DER.` CSR `Certificate Signing Request,即证书签名请求,这个并不是证书,而是向权威证书颁发机构获得签名证书的申请,其核心内容是一个公钥(当然还附带了一些别的信息),在生成这个申请的时候,同时也会生成一个私钥,私钥要自己保管好.做过iOS APP的朋友都应该知道是怎么向苹果申请开发者证书的吧.` PFX/P12 `predecessor of PKCS#12,包含公钥和私钥的二进制格式证书,对nginx服务器来说,一般CRT和KEY是分开存放在不同文件中的,但Windows的IIS则将它们存在一个PFX文件中,(因此这个文件包含了证书及私钥)这样会不会不安全?应该不会,PFX通常会有一个"提取密码",你想把里面的东西读取出来的话,它就要求你提供提取密码,PFX使用的时DER编码。` p7b `以树状展示证书链(certificate chain),同时也支持单个证书,不含私钥。` JKS `即Java Key Storage,这是Java的专利,跟OpenSSL关系不大,利用Java的一个叫"keytool"的工具,可以将PFX转为JKS,当然了,keytool也能直接生成JKS,不过在此就不多表了.`    生成pfx文件 ```bash $ openssl pkcs12 -export -in certificate.crt -inkey privateKey.key -out certificate.pfx ``` pfx转换为pem编码(默认的pfx为der格式) ```bash $ openssl pkcs12 -in certificate.pfx -out certificate.pfx.pem -nodes ``` pfx导出crt和key ```bash $ openssl pkcs12 -in certificate.pfx -nocerts -nodes -out privateKey.key $ openssl pkcs12 -in certificate.pfx -clcerts -nokeys -out certificate.crt ``` crt和key合并成pfx ```bash $ openssl pkcs12 -export -in certificate.crt -inkey privateKey.key -out certificate.pfx ``` 查看pem格式的key ```bash $ openssl rsa -in mykey.key -text -noout ``` 查看der格式的key ```bash $ openssl rsa -in mykey.key -text -noout -inform der ``` 查看pem格式的csr ```bash $ openssl req -noout -text -in my.csr ``` 查看der格式的csr ```bash $ openssl req -noout -text -in my.csr -inform der ``` 转载:https://blog.51cto.com/wushank/1915795
阅读 26 评论 0 收藏 0
阅读 26
评论 0
收藏 0