关于证书(备忘录)

PKI

PKI(Public Key Infrastructure)翻译过来就是公钥基础设施,可以理解为利用公钥技术为网络应用提供加密和数字签名等密码服务以及必需的密钥和证书管理体系。它是一个提供安全服务的基础设施,PKI技术是信息安全技术的核心,同时也是电子商务的关键和基础技术。

PKI既不是一个协议,也不是一个软件,它是一个标准,在这个标准之下发展出的为了实现安全基础服务目的的技术统称为PKI。

PKI的组成

PKI是一个标准,它包括一些基本的组件,不同的组件提供不同的服务,主要由以下几个组件组成:

  1. 认证中心CA(证书签发):CA机构,又称为证书授证 (Certificate Authority) 中心,是PKI的”核心”,即数字证书的申请及签发机关,CA必须具备权威性的特征,它负责管理PKI结构下的所有用户(包括各种应用程序)的证书,把用户的公钥和用户的其他信息捆绑在一起,在网上验证用户的身份,CA还要负责用户证书的黑名单登记和黑名单发布。
  2. X.500目录服务器(证书保存):X.500目录服务器用于”发布”用户的证书和黑名单信息,用户可通过标准的LDAP协议查询自己或其他人的证书和下载黑名单信息。
  3. 具有高强度密码算法(SSL)的安全WWW服务器:Secure socket layer(SSL)协议最初由Netscape 企业发展,现已成为网络用来鉴别网站和网页浏览者身份,以及在浏览器使用者及网页服务器之间进行加密通讯的全球化标准。
  4. Web(安全通信平台):Web有Web Client端和Web Server端两部分,分别安装在客户端和服务器端,通过具有高强度密码算法的SSL 协议保证客户端和服务器端数据的机密性、完整性、身份验证。
  5. 自开发安全应用系统:自开发安全应用系统是指各行业自开发的各种具体应用系统,例如银行、证券的应用系统等。

CA和数字证书

CA指的是”Certificate Authority”(证书颁发机构)。CA是存储、签名和颁发数字证书的实体。CA充当受信任的第三方,既受证书的主体(所有者)的信任,也受依赖证书的一方的信任。

证书的格式由X.509或EMV标准指定。

你可以使用https://www.ssleye.com/ssltool/cer_check.html查看证书的详细信息。

一个数字证书通常包含以下信息:

  • 主题信息(通用名称、国家、省份等)

  • 签发者信息

  • 证书信息

    • 序列号(Serial Number):由CA维护的为它所发的每个证书分配的一个序列号,用来追踪和撤销证书。只要拥有签发者信息和序列号,就可以唯一标识一个证书;

    • 类别归档

      • DV(域验证)

        域验证是今天最常见的类型;对这些证书,CA只会对申请者是否拥有域的控制权进行核实,不管其它事情。有很多方法来做这件事,例如要求申请人在web服务器上某个文件中放置一个随机数。这些证书也是最便宜的。

        DV证书由CA颁发,极少或没有人的互动,通常在申请人方面也是自动完成的。ACME之类的协议允许完全自动申请和颁发过程。

        DV证书的目的是启用加密连接,它并不会验证是谁在管理着域,或他们是否诚实,或他们的域是否合法——唯一的目的就是在浏览器和服务器之间启用安全连接。

      • OV(机构验证)

        相比之下,机构验证(也叫高可信度)证书要贵得多,大约每年200美元(最多可达到500美元)。由于需要额外的文书工作,其申请过程更复杂。相比DV来说,增加的价格很大程度上是审核过程的额外工作造成的;除了域的验证控制之外,CA还将检查文件以核实申请者是否为合法机构(通过许可证或法人文件)。

      • EV(扩展验证)

        EV证书最为昂贵,大约每年300美元(最多可能达到1000美元),EV证书的审核要求在OV证书的审核基础上有所增加,审核过程最为详细。它可能需要一些文件,如银行账户证明、地址证明、更详细的法人证明以及雇员作为证书申请人并得到授权的证明。

        获得EV证书是一个复杂的过程,不仅需要时间,还需要技术人员的努力,以及公司行政部门提供所需要的文件。

    • 签名算法(Signature Algorithm):数字签名所采用的算法,如:SHA384。

    • 有效期:证书的有效期限,包括起止时间。

    • 服务器公钥信息:包括服务的公钥算法、公钥强度、公钥。

服务器向CA申请证书的流程:

  1. 服务器生成一对密钥(公钥和私钥)
  2. 从密钥中衍生出CSR(certificate signing request)文件。CSR中主要包含如下信息:
    1. 公钥信息
    2. 服务器信息
    3. 签名算法和数字签名(使用服务器私钥)
  3. 将CSR提交给CA,验证通过后CA生成数字签名(用自己的私钥)并颁发证书。

一个HTTPS请求示例:

https://www.techtarget.com/searchsecurity/definition/certificate-authority

  1. 客户端发起请求

    这个请求会包含客户端支持的 SSL/TLS 协议版本,以及一系列加密算法。

  2. 服务端返回证书和选择的协议和算法

  3. 客户端验证证书

    1. 检查该证书的ca是否位于浏览器信任的证书链内
    2. 检查证书是否过期,是否被吊销
    3. 使用对应ca的公钥对数字签名进行解密;按照证书中的签名算法生成原始信息的摘要,二者比对验证证书的有效性。
    4. 生成一个随机的会话密钥,然后使用服务端的公钥(提取自证书)对这个会话密钥进行加密并发送至服务器。
  4. 服务器使用自己的私钥对会话密钥进行解密。这个会话密钥将用于与客户端接下来的对称加密通信。

  5. 加密通信(加密算法已在第二步协商完毕)。

证书自动化

以前证书可以拿到免费半年的,虽然每次需要去阿里云控制台操作一番,但好在频率可接受,故一切相安无事。

现在只能拿到3个月的免费证书,故已经不太能接受这个更新证书的频率了。经网友推荐,采用acme.sh

使用方法

  1. 安装脚本
1
2
3
git clone --depth 1 https://github.com/acmesh-official/acme.sh.git
cd acme.sh
./acme.sh --install -m wildrekord@gmail.com
  1. 生成证书
1
acme.sh --issue -d sxrekord.com -w /usr/local/nginx/conf/cert

名词解释

数字签名:

对信息使用RSA或SHA1等算法生成摘要(HASH)。然后对摘要进行加密生成数字签名。

证书链:

有了证书以后,是可以继续签发下级证书的,以此方式形成的所有相关证书就叫证书链。

其他

服务器类型 证书文件说明
Tomcat 通常安装PFX、JKS格式的证书文件,JKS文件请在JSK服务器列下载。PFX文件说明如下:domain name.pfx:证书文件,格式为PFX。pfx-password.txt:证书保护密码。说明 如果您在提交证书申请时,未将CSR生成方式设置为系统生成,则您下载的证书压缩包中不包含TXT密码文件。
Apache 通常安装CRT格式的证书文件。文件说明如下:domain name_public.crt:证书文件。domain name_chain.crt:证书链文件。domain name.key:证书私钥文件。
Nginx 通常安装PEM格式的证书文件。文件说明如下:domain name.pem:证书文件。domain name.key:证书私钥文件。
IIS 通常安装PFX格式的证书文件。文件说明如下:domain name.pfx:证书文件。pfx-password.txt:证书保护密码。
JKS 通常安装JKS格式的证书文件。文件说明如下:domain name.jks:证书文件。jks-password.txt:证书保护密码。
其他 PEM格式的证书文件。文件说明如下:domain name.pem:证书文件,格式为PEM。domain name.key:证书私钥文件。