SSL数字证书详解(六)

发布时间 2023-06-14 17:36:12作者: 我若安好,便是晴天

一、什么是SSL数字证书

  SSL证书,也称为SSL 服务器证书,是遵守SSL协议的一种数字证书,由全球信任的证书颁发机构 (CA) 验证服务器身份后颁发。服务器部署了SSL证书后可以确保用户在浏览器上输入的机密信息和从服务器上查询的机密信息从用户电脑到服务器之间的传输链路上是高强度加密传输的,是不可能被非法篡改和窃取的。同时向网站访问者证明了服务器的真实身份,此真实身份是通过第三方权威机构验证的。也就是说有两大作用:数据加密和身份认证。

  • 身份认证:验证网站的身份,确保网站为可信任的真实网站,避免假冒的钓鱼网站。
  • 数据加密:加密正在传输的数据。
  • seo优化:提升搜索排名,https协议的网站搜索排名要优于http协议的网站。

  SSL证书的认证原理是SSL握手协议、记录协议、警报协议:

  • 握手协议:是客户机和服务器用SSL连接通信时使用的第一个子协议,握手协议包括客户机与服务器之间的一系列消息。SSL中最复杂的协议就是握手协议。该协议允许服务器和客户机相互验证,协商加密和MAC算法以及保密密钥,用来保护在SSL记录中发送的数据。握手协议是在应用程序的数据传输之前使用的。
  • 记录协议:在客户机和服务器握手成功后使用,即客户机和服务器鉴别对方和确定安全信息交换使用的算法后,进入SSL记录协议,记录协议向SSL连接提供保密性和完整性两个服务。
  • 警报协议:客户机和服务器发现错误时,向对方发送一个警报消息。如果是致命错误,则算法立即关闭SSL连接,双方还会先删除相关的会话号,秘密和密钥。

二、SSL数字证书的分类

  SSL证书依据功能和品牌不同分类有所不同,但SSL证书作为国际通用的产品,可分为如下种类:

  • 扩展验证型(EV)SSL证书:遵循全球统一的严格身份验证标准颁发的 SSL 证书,是目前业界最高安全级别的 SSL 证书。
  • 组织验证型(OV)SSL证书:需要验证网站所有单位的真实身份的标准型 SSL 证书,此类证书也就是正常的 SSL 证书,不仅能起到网站机密信息加密的作用,而且能向用户证明网站的真实身份。
  • 域名验证型(DV)SSL证书:只验证网站域名所有权的简易型 SSL 证书。

  还可以根据证书与绑定的域名关系分为单域名证书、多域名证书、通配符证书、混合证书等。

三、SSL数字证书的数据结构

  SSL证书包含如下数据结构:

--Version 版本
--Serial Number 序列号
--Algorithm ID 算法标识
--Issuer 颁发者
--Validity  有效期
Not Before 有效起始日期
Not After  有效终止日期
--Subjec 使用者
--Subject Public Key Info 使用者公钥信息
-- Public Key Algorithm 公钥算法
--Subject Public Key 公钥
--Issuer Unique Identifier (Optional)  颁发者唯一标识
--Subject Unique Identifier (Optional) 使用者唯一标识
--Extensions (Optional) 扩展
Certificate Signature Algorithm 证书签名算法
Certificate Signature  证书签名

四、SSL证书格式

  SSL是放在服务器中的,不同的服务器以及服务器的版本,可能需要需要不同的证书格式,这些格式之间是可以进行相互转换的,主流的证书格式有:

文件后缀文件类型说明
*.DER或*.CER 二进制格式 只含有证书信息,不包含私钥。
*.CRT 二进制格式或文本格式 只含有证书信息,不包含私钥。
*.PEM 文本格式 一般存放证书或私钥,或同时包含证书和私钥。*.PEM文件如果只包含私钥,一般用*.KEY文件代替。
*.PFX或*.P12 二进制格式 同时包含证书和私钥,且一般有密码保护。

  常见的Web服务软件,通常都基于OpenSSL和Java两种基础密码库的,我们可以借助其提供的工具软件来生成自签证书:

  • Tomcat、Weblogic、JBoss:一般使用Java提供的密码库。通过JDK工具包中的Keytool工具,生成Java Keystore(JKS)格式的证书文件。
  • Apache、Nginx:一般使用OpenSSL工具提供的密码库,生成PEM、KEY、CRT等格式的证书文件。
  • IBM的Web产品:一般使用IBM产品自带的iKeyman工具,生成KDB格式的证书文件。
  • IIS:使用Windows自带的证书库生成PFX格式的证书文件。

五、公钥和私钥

  公钥(Public Key)与私钥(Private Key)是通过加密算法得到的一个密钥对,通常只有非对称加密才有这两个概念。公钥是密钥对外公开的部分,私钥则是非公开的部分,由用户自行保管。

  公钥可对会话进行加密、验证数字签名,只有使用对应的私钥才能解密会话数据,从而保证数据传输的安全性。由于密钥仅为本人所有,可以产生其他人无法生成的加密文件,也就是形成了数字签名。

  SSL证书采用公钥体制,即用公钥进行加密、验证签名,用私钥进行解密和签名。无论通过哪种方式生成密钥,都要妥善地保管私钥文件。私钥文件一旦丢失或者损坏,则公钥及数字证书将无法使用。

六、OpenSSL工具使用

  Openssl 是一个开源的安全套接字层密码库,可用于管理生成证书,功能比keytool 多。使用时可以从官网下载最新的工具包进行安装后使用,参考官方帮助生成证书的步骤如下: 

  1.生成证书颁发机构证书:在生产环境中,您应该从CA获得证书。在测试或开发环境中,您可以生成自己的CA。要生成 CA证书,请运行以下命令。

    #1、生成CA证书私钥:基于genrsa算法的私钥,长度为2048,输出到文件ca.key
    openssl genrsa -out ca.key 2048 
    #2、生成CA证书:基于ca.key私钥生成一个新的CA证书,输出到文件ca.crt
    openssl req -x509 -new -nodes -sha512 -days 3650 \
             -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
             -key ca.key \
             -out ca.crt

  2.生成服务器证书:里面包含4个小步骤,证书通常包含一个yourdomain.com.crt文件和一个yourdomain.com.key文件。

#1、生成私钥:生成基于genrsa算法的私钥,长度为2048,输出到文件yourdomain.com.key
    openssl genrsa -out yourdomain.com.key 2048 
#2、生成证书签名请求(CSR):基于yourdomain.com.key生成,输出到文件server.key.csr。要生成正式的数字证书文件之前,需要先生成一个包含申请者自身个人信息的请求文件csr,将来的证书文件中的申请者信息就来自于该文件。
    openssl req -sha512 -new \
           -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
           -key yourdomain.com.key \
           -out yourdomain.com.csr
#3、生成 x509 v3 扩展文件:用于生成符合SAN 和 x509 v3 的证书扩展要求。
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = 192.168.1.100

[alt_names]
DNS.1=yourdomain.com
DNS.2=yourdomain
DNS.3=hostname
EOF

#4、使用该v3.ext文件为您的 Harbor主机生成证书,输出到文件yourdomain.com.crt。
       openssl x509 -req -sha512 -days 3650 \
         -extfile v3.ext \
         -CA ca.crt -CAkey ca.key -CAcreateserial \
         -in yourdomain.com.csr \
         -out yourdomain.com.crt

  3.证书转换:生成ca.crt、yourdomain.com.crt和yourdomain.com.key文件后就可以配置到服务器,但是根据不同的服务器类型可能需要对证书进行转换。

#转换yourdomain.com.crt为yourdomain.com.cert
  openssl x509 -inform PEM -in yourdomain.com.crt -out yourdomain.com.cert

七、Keytool工具使用

  keytool 是 java JDK 自带的证书管理工具,使用 keytool 可以生成密钥,创建证书。Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中。keytool 创建证书的步骤如下:

  1.生成秘钥库并创建一个密钥对:秘钥库用于存储一个或者多个密钥对,每个秘钥对都需要给它们取一个别名。运行以下命令后需要输入证书相关的属性信息。

keytool  -genkey  -keystore  "D:\my.keystore"   -alias  mytest   -keyalg   RSA   -validity  3650

  2.导出证书:根据密钥对的别名可以导出相应的证书。