Linux下使用OpenSSL自签证书操作笔记

来源:互联网 发布:比较好的程序员论坛 编辑:程序博客网 时间:2024/06/11 19:41

Linux下使用OpenSSL自签证书操作笔记

概述

要部署安全服务器,通常情况下是发送证书请求(包括自己的公钥、公司证明材料及费用到一个证书颁发机构(CA)。CA验证证书请求及请求者身份后再来签发证书。
由CA签署的证书配置到服务器可提供两个重要的功能:
1. 浏览器会自动识别证书并且在不提示用户的情况下允许创建一个安全连接。
2. 当一个CA生成一个签署过的证书,它为提供网页给浏览器的组织提供身份担保。

浏览器有一个CA列表,当一个浏览器遇到一个其授权CA并不在列表中的证书,浏览器将询问用户是否接受或拒绝连接。
一般在开发或测试环境中,使用自签证书,从而就节省了与CA机构的沟通成本。

安全服务器SSL证书的构成

CA签发的证书包含有所有者信息、服务器公钥、为了确定认证关系的证书链。这类的证书格式常用的有PKCS12、JKS,都是以二进制方式存储的。
一般的证书字段如下:

  • 版本 指定所编码证书的版本号。可能的值 V1、V2、V3
  • 序列号 包含证书颁发机构 (CA) 分配给证书的一个唯一正整数。一般用十六进制表示。
  • 签名算法 包含一个对象标识符 (OID),指定 CA 用于对证书进行签名的算法。例如,1.2.840.113549.1.1.5 指定 SHA-1 哈希算法与来自 RSA 实验室的 RSA 加密算法结合使用。签名哈希算法 指定签名用的哈希算法,如SHA-1
  • 颁发者 包含创建和签名证书的 CA 的 X.500 可分辨名称 (DN)。
  • 有效期 从指定证书生效的时间到指定证书失效的时间
  • 使用者 指定证书的使用者信息 CN =www.domain.com OU = whois O = whois L = location S = city C = cn
  • 公钥 包含公钥和关联的算法信息。如DSA(1024bit) RSA(2048bit)
  • 授权密钥标识符 标识证书颁发机构 (CA) 公钥,与用于签署证书的 CA 私钥对应。
  • 基本约束 指定实体是否可用作 CA,如果可以,则指定在证书链中该 CA 下可以存在的从属 CA 的数量。
  • 使用者密钥标识符 区分证书使用者持有的多个公钥。扩展值一般是密钥的 SHA-1 哈希。
  • 指纹算法 为证书信息生成摘要的算法指纹,使用指纹算法生成的摘要信息,用于保证证书的完整性
  • 友好的名称 指定证书别名(alias)

    证书链不是存储于证书字段之中,它会在确认证书认证关系时被用到,如果证书链缺失,会导致证书的认证失败。一般在PKCS12及JKS标准的证书中,它的结构是这样的:
    Entry type:PrivateKeyEntry
    Certificate chain length 3
    一般证书的证书链是大于等于2级的,如果某个证书的证书链为1,你就要确认它是不是由ROOTCA直接签发的或者是要作为根证书使用的了,如果不是则需要单独为他指定证书链。
    所以在有的服务器上,配置启用SSL时,它指定的文件是分离的即 包含公钥部分的证书、私钥、证书链。


签名数据的产生过程有如下几步:
1. 对于每一个签名者,他用消息摘要算法计算出摘要值 。
2. 对于每一个签名者,消息摘要和相关的信息用自己的私钥加密。
3. 对于每一个签名者,把加密的消息摘要和其他的签名者特定信息放入signer_info值中。每个 签名者的证书、crl等也在这一步被收集进来。
4. 把所有签名者的信息摘要算法、他们的signer_info值和内容一起放进sign值中。

基础配置

参考openssl配置文件 openssl.cnf 来配置工作目录

locate openssl.cnf

mkdir /home/whois/CACA_HOME=!$mkdir -p ${CA_HOME}/certs     #存放已颁发的证书mkdir -p ${CA_HOME}/newcerts  #存放CA指令生成的新证书mkdir -p ${CA_HOME}/private   #存放私钥mkdir -p ${CA_HOME}/crl       #存放已吊销的证书touch ${CA_HOME}/index.txt    #OpenSSL定义的已签发证书的文本数据库文件,这个文件通常在初始化的时候是空的cd ${CA_HOME}echo 01>serial              #证书签发时使用的序列号参考文件,该文件的序列号是以16进制格式进行存放的,该文件必须提供并且包含一个有效的序列号

根证书

密钥

openssl rand -out private/.rand 1000

参数说明:
rand——生成随机数
-out——指定输出文件
1000——指定随机数长度

用openssl创建CA证书的RSA密钥(PEM格式): openssl genrsa -aes256 -rand private/.rand -out private/cakey.pem 4096

参数说明:
OpenSSL通常使用PEM(Privacy Enbanced Mail)格式来保存私钥,构建私钥的命令如下:
genrsa 使用RSA算法产生私钥
-aes256[-des3] 若想对私钥进行加密,可以使用该类选项。aes256为256位密钥的AES算法对私钥进行加密
-out 指定生成的文件,包含了公钥和私钥两部分,也就是说这个文件即可用来加密也可以用来解密。
2048 指定私钥长度,默认是2048

证书请求

openssl req -new -sha256 -key private/cakey.pem -out private/careq.pem -subj \"/C=CN/ST=HuNan/L=ChenZhou/O=Difflib (ChenZhou) Information Technology Co., Ltd./OU=CA Dept./CN=difflib.com"

req 主要用来生成 PKCS#10格式的证书请求,还可以创建自签证书。
-new 这个选项用于生成一个新的证书请求,并提示用户输入个人信息。如果没有指定-key 则会先生成一个RSA私钥,再生成证书请求。
-key 指定私钥路径,没有指定-key选项时,会生成私钥文件,默认是有密码保护的,-nodes(no des),可以明确指定不需要密码保护。
-out——输出的csr文件的路径 PEM
-subj——替换或指定证书申请者的信息(subject的缩写),不加该项目,需要多次交互填写如下信息
Organization Name(O):申请单位名称法定名称,可以是中文或英文
Organization Unit(OU):申请单位的所在部门,可以是中文或英文
Country Code(C):申请单位所属国家,只能是两个字母的国家码,如中国只能是:CN
State or Province(S):申请单位所在省名或州名,可以是中文或英文
Locality(L):申请单位所在城市名,可以是中文或英文
Common Name(CN):申请SSL证书的具体网站域名,如果为了https申请,这个必须和域名吻合,否则会引发浏览器警报。
同时生成公钥和请求文件 openssl req -newkey rsa:1024 -out crs.pem -keyform 是要的格式,默认为PEM -keyout可以指定生成的私钥文件名,-pubout可以指定生成的公钥文件名

核实证书请求文件

 openssl req -in private/careq.pem -verify -text 

签发根证书(X.509标准,PEM格式)

csr文件生成以后,可以将其发送给第三方权威机构CA签发,当然,这里我们使用OpenSSL对该证书进行自签发:

openssl x509 -req -days 365 -sha256 -extensions v3_ca -signkey \private/cakey.pem -in private/careq.pem -out certs/cacert.pem

x509 这里是指一个多用途的证书工具,可以显示证书信息,转换证书,修改证书信息
-req By default a certificate is expected on input. With this option a certificate request is expected instead.
-days 证书的有效期(天)
-sha256 证书摘要采用sha2算法
-extensions 按照openssl.cnf文件中配置的v3_ca项添加扩展
-signkey 签发证书的私钥
-in 指定证书请求文件
-out 指定证书输出文件

核实根证书文件

openssl x509 -in certs/cacert.pem -noout -text

注意,要使用自签根证书所签发的子证书生效,需要将cacert.pem导入到客户端浏览器

Server端证书

密钥

echo 02>serialopenssl rand -out private/.rand 1000openssl genrsa -rand private/.rand -out private/api.dev.domain.com.key.pem 2048

用于server端证书的密钥不设置密码

证书请求

openssl req -new -sha256 -key private/api.dev.domain.com.key.pem -out private/api.dev.domain.com.req.pem \-subj "/C=CN/ST=HuNan/L=ChenZhou/O=HuNan Zhuku Network Information Technology Co., Ltd./OU=OPS Dept./CN=api.dev.domain.com"

以上三步可以用如下一行命令替代
openssl req -new -nodes -subj “/C=CN/ST=HuNan/L=ChenZhou/O=HuNan Zhuku Network Information Technology Co., Ltd./OU=OPS Dept./CN=api.dev.domain.com” -sha256 -newkey rsa:2048 -keyout private/api.dev.domain.com.key.pem -out private/api.dev.domain.com.req.pem
-nodes指定私钥文件不被加密
-sha256 指定摘要算法,openssl默认采用sha1,在chrome 41以后已经不将sha1的证书标为绿标了。
-newkey rsa:2048 指定私钥类型和长度。
-keyout生成私钥的位置

配置Tomcat

mkdir tomcat
将将密钥和证书转换为.p12证书
openssl pkcs12 -export -in certs/api.dev.domain.com.cert.pem -inkey private/api.dev.domain.com.key.pem -out tomcat/api.dev.domain.com.p12 -name tomcat

将需要输入一个密码

将.p12证书转换为JKS证书
keytool -importkeystore -v -srckeystore tomcat/api.dev.domain.com.p12 -srcstoretype pkcs12 -srcstorepass 123456 -destkeystore tomcat/api.dev.domain.com.keystore -deststoretype jks -deststorepass 123456

确保操作系统中已经安装了JDK

使用SSL证书

<Connector           protocol="org.apache.coyote.http11.Http11NioProtocol"           port="48080" maxThreads="200"           scheme="https" secure="true" SSLEnabled="true"           keystoreFile="/home/ci/certs/api.dev.domain.com.keystore" keystorePass="123456"           clientAuth="false" sslProtocol="TLS"/>

配置Tomcat

mkdir tomcat
将将密钥和证书转换为.p12证书

openssl pkcs12 -export -in certs/api.dev.domain.com.cert.pem -inkey private/api.dev.domain.com.key.pem -out tomcat/api.dev.domain.com.p12 -name tomcat

将需要输入一个密码

将.p12证书转换为JKS证书

keytool -importkeystore -v -srckeystore  tomcat/api.dev.domain.com.p12 -srcstoretype pkcs12 -srcstorepass 123456 -destkeystore tomcat/api.dev.domain.com.keystore -deststoretype jks -deststorepass 123456

确保操作系统中已经安装了JDK

使用SSL证书

<Connector           protocol="org.apache.coyote.http11.Http11NioProtocol"           port="48080" maxThreads="200"           scheme="https" secure="true" SSLEnabled="true"           keystoreFile="/home/ci/certs/api.dev.domain.com.keystore" keystorePass="123456"           clientAuth="false" sslProtocol="TLS"/>

Client端证书

密钥

openssl genrsa -aes256 -out private/client-key.pem 1024

证书请求

openssl req -new -key private/client-key.pem -out private/client.csr -subj \"/C=CN/ST=myprovince/L=mycity/O=myorganization/OU=mygroup/CN=myname"

签发证书(client端证书)

openssl x509 -req -days 365 -sha1 -extensions v3_req -CA certs/ca.cer -CAkey private/cakey.pem \-CAserial ca.srl -in private/client.csr -out certs/client.cer

注意的是,上方签发服务端证书时已经使用-CAcreateserial生成过ca.srl文件,因此这里不需要带上这个参数了。

证书转换

该部分内容,仅将之前用到的命令记录一下,对于整个证书的标准体系了解还不充分,所以仅供参考。证书转换要作的工作有这么几种

加/解密文件

用公钥加密文件,加密的内容是有字数限制的,适合短小内容的加密
- 密钥中提取公钥:


openssl rsa -in private/cakey.pem -pubout -out private/cakey_pub.key

-in指定输入文件-out指定提取生成公钥的文件名。至此,我们手上就有了一个公钥,一个私钥(包含公钥)。现在可以将用公钥来加密文件了。
- 加密文件
openssl rsautl -encrypt -in hello -inkey private/cakey_pub.key -pubin -out hello.en
-in指定要加密的文件,-inkey指定密钥,-pubin表明是用纯公钥文件加密,-out为加密后的文件。
- 解密文件:
openssl rsautl -decrypt -in hello.en -inkey private/cakey.key -out hello
-in指定被加密的文件,-inkey指定私钥文件,-out为解密后的文件。

不同编码转换:

如DER格式文件转BASE64格式文件

  • X.509证书PEM转为DER
    openssl x509 -in cert.crt -outform der -out cert.der
  • X.509证书DER转为PEM
    openssl x509 -in cert.crt -inform der -outform pem -out cert.pem

    用 -outform -inform 指定 DER 还是 PAM 格式
    提示:要转换KEY文件也类似,只不过把x509换成rsa,要转CSR的话,把x509换成req

  • PFX证书转为PEM
    对*nix服务器来说,一般证书(CRT)和密钥(KEY)是分开存放在不同文件中的,但Windows的IIS则将它们存在一个PFX文件中,且PFX文件还包含一个“提取密码”,PFX使用DER编码
    将PFX转换为PEM编码:
    openssl pkcs12 -in for-iis.pfx -out for-iis.pem -nodes

不同证书标准的转换:

如PKCS标准证书转JKS标准证书,- **X.509转PKCS12**  - X.509转p12  openssl pkcs12 -export -in Cert.pem -out Cert.p12 -inkey key.pem  - X.509转PFX  openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt  > 其中CACert.crt是CA(权威证书颁发机构)的根证书,有的话也通过-certfile参数一起带进去.这么看来,PFX就是将证书和密钥放置到一起的文件.- **PKCS#12转X.509**PKCS#12证书包含了证书和密钥```conf# p12导出密钥openssl pkcs12 -nocerts -nodes -in cert.p12 -out private.pem# pfx导出密钥openssl pkcs12 -nocerts -nodes -in cert.pfx -out mycert.key# 导出证书openssl pkcs12 -clcerts -nokeys -in cert.p12 -out cert.pem# 导出客户端证书openssl pkcs12 -export -clcerts -name myclient -inkey \private/client-key.pem -in certs/client.cer -out certs/client.keystore# 参数含义如下:# pkcs12——用来处理pkcs#12格式的证书# -export——执行的是导出操作# -clcerts——导出的是客户端证书,-cacerts则表示导出的是ca证书# -name——导出的证书别名# -inkey——证书的私钥路径# -in——要导出的证书的路径# -out——输出的密钥库文件的路径# 导出服务端证书openssl pkcs12 -export -clcerts -name myserver -inkey \private/server-key.pem -in certs/server.cer -out certs/server.keystore```- **PFX(PKCS#12)转为JKS**keytool -importkeystore -v -srckeystore  tomcat/api.dev.domain.com.p12 -srcstoretype pkcs12 -srcstorepass 123456 -destkeystore api.dev.domain.com.keystore -deststoretype jks -deststorepass 123456- **JKS转X.509**JKS标准证书包含了证书和密钥keytool -importcert -trustcacerts -alias www.mydomain.com \-file certs/ca.cer -keystore certs/ca-trust.keystore- **X.509密钥转PVK**  PEM格式的ca.key转换为Microsoft可以识别的格式。  pvk -in ca.key -out ca.pvk -nocrypt -topvk- **X.509证书转SPC**  openssl crl2pkcs7 -nocrl -certfile ca.pem  -outform DER -out venus.spc- **X.509证书转BKS**```cnf  bcprov-jdk15on-156.jar到其官网下载  openssl x509 -inform PEM -subject_hash -noout -in cacert.pem  alias =!$  keytool -import -v -trustcacerts -alias ${alias} -file cert.pem -keystore bithertruststore.bks -storetype BKS -providerclass org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath bcprov-jdk15on-156.jar -storepass 123456```

相关阅读

  • openssl官网
  • ITU-T 国际电信联盟电信标准分局(ITU-T for ITU Telecommunication Standardization Sector),该机构创建于1993年,前身是国际电报电话咨询委员会,总部设在瑞士日内瓦。
  • PKI 即Public Key Infrastructure,利用公钥加密技术为电子商务的开展提供一套安全基础平台的技术和规范。PKI标准可以分为第一代和第二代标准。
    第一代PKI标准主要包括美国RSA公司的公钥加密标准(Public Key Cryptography Standards,PKCS)系列、国际电信联盟的ITU-T X.509、IETF组织的公钥基础设施X.509(Public Key Infrastructure X.509,PKIX)标准系列、无线应用协议(Wireless Application Protocol ,WAP)论坛的无线公钥基础设施(Wireless Public Key Infrastructure,WPKI)标准等。第一代PKI标准主要是基于抽象语法符号(Abstract Syntax Notation One,ASN.1)编码的,实现比较困难,这也在一定程度上影响了标准的推广。
    第二代PKI标准是在2001年,由微软、VeriSign和webMethods三家公司发布了XML密钥管理规范(XML Key Management Specification,XKMS),被称为第二代PKI标准。XKMS由两部分组成:XML密钥信息服务规范(XML Key Information Service Specification,X-KISS)和XML密钥注册服务规范(XML Key Registration Service Specification,X-KRSS)。X-KISS定义了包含在XML-SIG元素中的用于验证公钥信息合法性的信任服务规范;使用X-KISS规范,XML应用程序可通过网络委托可信的第三方CA处理有关认证签名、查询、验证、绑定公钥信息等服务。X-KRSS则定义了一种可通过网络接受公钥注册、撤销、恢复的服务规范;XML应用程序建立的密钥对,可通过X-KRSS规范将公钥部分及其它有关的身份信息发给可信的第三方CA注册。X-KISS和X-KRSS规范都按照XML Schema 结构化语言定义,使用简单对象访问协议(SOAP V1.1)进行通信,其服务与消息的语法定义遵循Web服务定义语言(WSDL V1.0)。目前XKMS已成为W3C的推荐标准,并已被微软、VeriSign等公司集成于他们的产品中(微软已在ASP.NET中集成了XKMS,VeriSign已发布了基于Java的信任服务集成工具包TSIK)。
    CA中心普遍采用的规范是X.509[13]系列和PKCS系列,其中主要应用到了以下规范:
    1.X.209(1988)
    2.X.500(1993)
    3.X.509(1993)
    4.PKCS系列标准
    5.OCSP在线证书状态协议
    6.LDAP 轻量级目录访问协议PKI
    主要包括四个部分:X.509 格式的证书([X.509][X.509] V3)和证书废止列表CRL([X.509][X.509] V2);CA 操作协议;CA 管理协议;CA 政策制定。
  • X.209 ASN.1是描述在网络上传输信息格式的标准方法。它有两部分:第一部份(ISO 8824/ITU X.208)描述信息内的数据、数据类型及序列格式,也就是数据的语法;第二部分(ISO 8825/ITU X.209)描述如何将各部分数据组成消息,也就是数据的基本编码规则。ASN.1原来是作为X.409的一部分而开发的,后来才独立地成为一个标准。这两个协议除了在PKI体系中被应用外,还被广泛应用于通信和计算机的其他领域。
  • X.500 是一套已经被国际标准化组织(ISO)接受的目录服务系统标准,它定义了一个机构如何在全局范围内共享其名字和与之相关的对象。X.500是层次性的,其中的管理域(机构、分支、部门和工作组)可以提供这些域内的用户和资源信息。在PKI体系中,X.500被用来惟一标识一个实体,该实体可以是机构、组织、个人或一台服务器。X.500被认为是实现目录服务的最佳途径,但X.500的实现需要较大的投资,并且比其他方式速度慢;而其优势具有信息模型、多功能和开放性。
  • [X.509] X.509标准是ITU-T设计的PKI标准(子集,数字证书标准),在X.500确保用户名称惟一性的基础上,X.509为X.500用户名称提供了通信实体的鉴别机制,并规定了实体鉴别过程中广泛适用的证书语法和数据接口,所有的证书都符合为PKI制定的 ITU-T X509 国际标准,详情可以参考RFC5280。SSL使用的就是这种证书标准。X.509的最初版本公布于1988年。X.509证书由用户公共密钥和用户标识符组成。此外还包括版本号、证书序列号、CA标识符、签名算法标识、签发者名称、证书有效期等信息。这一标准的最新版本是X.509 v3,它定义了包含扩展信息的数字证书。该版数字证书提供了一个扩展信息字段,用来提供更多的灵活性及特殊应用环境下所需的信息传送。同样的X.509证书,可能有不同的编码格式,目前有以下两种编码格式:

    • X.509 DER 编码(ASCII)的后缀是: .DER .CER .CRT 即Distinguished Encoding Rules格式编码的证书,打开看是二进制格式,不可读。Java和Windows服务器偏向于使用这种编码格式。

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

    • X.509 PAM 编码(Base64)的后缀是: .PEM .CER .CRT 即 Privacy Enhanced Mail格式编码的证书,打开看文本格式,以”—–BEGIN…”开头, “—–END…”结尾,内容是BASE64编码,Apache和*NIX服务器偏向于使用这种编码格式。

      查看PEM编码的证书信息:openssl x509 -in certificate.pem -text -noout

    虽然我们已经知道有PEM和DER这两种编码格式,但文件扩展名并不一定就叫”PEM”或者”DER”,常见的扩展名除了PEM和DER还有以下这些,它们除了编码格式可能不同之外,内容也有差别,但大多数都能相互转换编码格式.
    .CRT - CRT应该是certificate的三个字母,其实还是证书的意思,常见于*NIX系统,有可能是PEM编码,也有可能是DER编码。
    .CER - 还是certificate,还是证书,常见于Windows系统,同样的,可能是PEM编码,也可能是DER编码。
    .KEY - 通常用来存放一个公钥或者私钥,编码可能是PEM或DER,
    查看KEY的办法:openssl rsa -in mykey.key -text -noout
    如果是DER格式的话,同理应该这样了:openssl rsa -in mykey.key -text -noout -inform der
    .CSR - Certificate Signing Request,即证书签名请求,这个并不是证书,而是向权威证书颁发机构获得签名证书的申请,其核心内容是一个公钥(当然还附带了一些别的信息)
    查看的办法:openssl req -noout -text -in my.csr (DER格式加上-inform der)
    其它:
    JKS 即Java Key Storage,这是SUN的专利,利用Java的一个叫”keytool”的工具。JCEKS在安全级别上要比JKS强在保护KeyStore中的私钥上使用TripleDES
    BKS 来自BouncyCastleProvider,它使用的也是TripleDES来保护密钥库中的Key,它能够防止证书库被不小心修改(Keystore的keyentry改掉1个bit都会产生错误),BKS能够跟JKS互操作

  • PKCS系列标准: 全称是 Public-Key Cryptography Standards ,是由 RSA 实验室与其它安全系统开发商为促进公钥密码的发展而制订的一系列标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议。PKCS 目前共发布过 15 个标准:

    • PKCS#1:定义RSA公开密钥算法加密和签名机制,主要用于组织PKCS#7中所描述的数字签名和数字信封。
    • PKCS#3:定义Diffie-Hellman密钥交换协议。
    • PKCS#5:描述一种利用从口令派生出来的安全密钥加密字符串的方法。使用MD2或MD5 从口令中派生密钥,并采用DES-CBC模式加密。主要用于加密从一个计算机传送到另一个计算机的私人密钥,不能用于加密消息。
    • PKCS#6:描述了公钥证书的标准语法,主要描述X.509证书的扩展格式。
    • PKCS#7:定义一种通用的消息语法(Cryptographic Message Syntax Standard),包括数字签名和加密等用于增强的加密机制,PKCS#7与PEM兼容,所以不需其他密码操作,就可以将加密的消息转换成PEM消息。常用的后缀是: .P7B .P7C .SPC Cryptographic Message Syntax Standard 以树状展示证书链(certificate chain),同时也支持单个证书,里面包括1到多个证书,不含私钥,binary message。
    • PKCS#8:描述私有密钥信息格式,该信息包括公开密钥算法的私有密钥以及可选的属性集等。
    • PKCS#9:定义一些用于PKCS#6证书扩展、PKCS#7数字签名和PKCS#8私钥加密信息的属性类型。
    • PKCS#10:描述证书请求语法(Certification Request Standard)。常用的后缀是: .p10
    • PKCS#11:称为Cyptoki,定义了一套独立于技术的程序设计接口,用于智能卡和PCMCIA卡之类的加密设备。
    • PKCS#12:描述个人信息交换语法标准(Personal Information Exchange Syntax Standard)。描述了将用户公钥、私钥、证书和其他相关信息打包的语法。常用的后缀有: .P12 .PFX 是指以pkcs#12格式存储的证书和相应私钥,他通常包含保护密码,2进制方式
    • PKCS#13:椭圆曲线密码体制标准。
    • PKCS#14:伪随机数生成标准。
    • PKCS#15:密码令牌信息格式标准。
  • OCSP(Online Certificate Status Protocol)[14]是IETF颁布的用于核实数字证书在某一交易时刻是否仍然有效的标准。该标准提供给PKI用户一条方便快捷的数字证书状态查询通道,使PKI体系能够更有效、更安全地在各个领域中被广泛应用。
  • LDAP规范(RFC1487)简化了笨重的X.500目录访问协议,并且在功能性、数据表示、编码和传输方面都进行了相应的修改。1997年,LDAP第3版本成为互联网标准。目前,LDAP v3已经在PKI体系中被广泛应用于证书信息发布、CRL信息发布、CA政策以及与信息发布相关的各个方面。
  • 密钥库文件格式【Keystore】

    格式 : JKS
    扩展名 : .jks/.ks
    描述 : 【Java Keystore】密钥库的Java实现版本,provider为SUN
    特点 : 密钥库和私钥用不同的密码进行保护

    格式 : JCEKS
    扩展名 : .jce
    描述 : 【JCE Keystore】密钥库的JCE实现版本,provider为SUN JCE
    特点 : 相对于JKS安全级别更高,保护Keystore私钥时采用TripleDES

    格式 : PKCS12
    扩展名 : .p12/.pfx
    描述 : 【PKCS #12】个人信息交换语法标准
    特点 : 1、包含私钥、公钥及其证书
    2、密钥库和私钥用相同密码进行保护

    格式 : BKS
    扩展名 : .bks
    描述 : Bouncycastle Keystore】密钥库的BC实现版本,provider为BC
    特点 : 基于JCE实现

    格式 : UBER
    扩展名 : .ubr
    描述 : 【Bouncycastle UBER Keystore】密钥库的BC更安全实现版本,provider为BC

  • 证书文件格式【Certificate】
    格式 : DER
    扩展名 : .cer/.crt/.rsa

描述 : 【ASN .1 DER】用于存放证书
特点 : 不含私钥、二进制

格式 : PKCS7
扩展名 : .p7b/.p7r
描述 : 【PKCS #7】加密信息语法标准

特点 : 1、p7b以树状展示证书链,不含私钥
2、p7r为CA对证书请求签名的回复,只能用于导入

格式 : CMS
扩展名 : .p7c/.p7m/.p7s
描述 : 【Cryptographic Message Syntax】
特点 : 1、p7c只保存证书
2、p7m:signature with enveloped data
3、p7s:时间戳签名文件

格式 : PEM
扩展名 : .pem
描述 : 【Printable Encoded Message】
特点 : 1、该编码格式在RFC1421中定义,其实PEM是【Privacy-Enhanced Mail】的简写,但他也同样广泛运用于密钥管理
2、ASCII文件
3、一般基于base 64编码
4、 Apache 用到的CA证书链就是PEM格式,它实际上可保存普通多个X509证书(.cer), 将每个证书简单加在一起就可以了

格式 : PKCS10
扩展名 : .p10/.csr
描述 : 【PKCS #10】公钥加密标准【Certificate Signing Request】
特点 : 1、证书签名请求文件
2、ASCII文件
3、CA签名后以p7r文件回复

格式 : SPC
扩展名 : .pvk/.spc
描述 : 【Software Publishing Certificate】
特点 : 微软公司特有的双证书文件格式,经常用于代码签名,其中
1、pvk用于保存私钥
2、spc用于保存公钥

原创粉丝点击