SSL、TLS、HTTPS 、证书、CA

1.简介

  官方文档                                                  

SSL https://www.ssl.com/faqs/faq-what-is-ssl/
TLS

https://datatracker.ietf.org/group/tls/documents/ 

https://datatracker.ietf.org/doc/html/rfc8446  TLS 1.3

X.509

https://tools.ietf.org/html/rfc5280

HTTPS

https://https.cio.gov/

https://tools.ietf.org/html/rfc2818

    SSL(Secure Sockets Layer 安全套接字层协议),是用于在联网计算机之间建立可靠链接的一种协议,这个可靠指的是 [ 经过身份验证 和 加密 ]。ssl这个名字弃用于1999年。

  TLS(Transport Layer Security 传输层安全协议),于1999年发布,接替原SSL并改名为TLS,是一种认证和加密协议。 TLS 1.3在中定义 RFC 8446 .

  HTTPS    =   HTTP : 443 + TLS 

2.信息安全问题

  • 传输[双]方身份的可靠性    --     使用数字证书解决
  • 信息的保密性               --     使用加密算法:对称aes,des等; 非对称:rsa
  • 信息的完整性                    --     散列算法(sha1、MD5等)生成摘要1与内容一起加密,另一方解密后得到摘要1和内容,使用相同散列算法对内容生成摘要2,对比摘要1与摘要2

3.CA、数字证书

3.1 验证过程

  简单情况下,服务端持有私钥,然后把公钥发给客户端,后者使用公钥就可以完成加密工作。

  但是,传输过程中数据可能被第3方劫持、冒充,在中间互相扮演对方。

  权威的认证机构(CA)可以解决这个问题。它用验证对方数字证书的可靠性。过程大致如下:

  • 服务端去权威机构申请证书,填写持有人、服务器地址等信息。
  • CA使用自己的私钥对服务器信息加密生成数字证书,包含(证书内容,散列算法,加密密文,服务端的公钥)。
  • 服务端得到数字证书后布置
  • 客户端预先把可靠的CA公钥列表存到本地。
  • 客户端发请求,得到服务端数字证书后,用CA公钥验证证书合法性
  • 合法后,会从证书里得到服务端公钥。
  • 加密传输

3.2 X.509 证书结构

  X.509 是一种公钥证书 格式标准,是将加密密钥对与网站、个人或组织等身份安全地关联的数字文档。见 RFC 5280 ,它的编码格式主要有两种: 

  • .DER 是二进制编码,可包含所有私钥、公钥和证书,是大多数浏览器的缺省格式,常见于 Windows 系统中的证书格式。
  • .PEM 是文本格式的,  以 “-----BEGIN CERTIFICATE----- 开头,已 -----END CERTIFICATE----- 结尾”, 中间是经过 base64 编码的内容, Apache 和 NGINX 服务器偏向于使用这种编码格式,也是 openssl 默认采用的信息存放方式。PEM 其实就是把 DER 的内容进行了一次 base64 编码。

3.3 查看其它证书

执行命令:

openssl s_client -connect qq.com:443 | openssl x509 -text

结果如下

admin@jfie82o:~$ openssl s_client -connect qq.com:443 | openssl x509 -text
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
verify return:1
depth=1 C = US, O = DigiCert Inc, CN = DigiCert Secure Site CN CA G3
verify return:1
depth=0 C = CN, ST = \E5\B9\BF\E4\B8\9C\E7\9C\81, L = \E6\B7\B1\E5\9C\B3\E5\B8\82, O = Shenzhen Tencent Computer Systems Company Limited, CN = qq.com
verify return:1
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            05:62:4d:f7:ef:6b:f9:d4:dd:21:ef:c1:69:19:5e:5d
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = US, O = DigiCert Inc, CN = DigiCert Secure Site CN CA G3
        Validity
            Not Before: Jul 26 00:00:00 2021 GMT
            Not After : Jul 26 23:59:59 2022 GMT
        Subject: C = CN, ST = \E5\B9\BF\E4\B8\9C\E7\9C\81, L = \E6\B7\B1\E5\9C\B3\E5\B8\82, O = Shenzhen Tencent Computer Systems Company Limited, CN = qq.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    00:e3:59:82:18:14:b3:4f:55:ec:1e:d5:bd:b1:3c:
                    14:78:f3:53:8c:b4:a2:c3:79:dc:1e:70:46:c8:6c:
                    44:a2:a8:6b:81:fc:1a:73:3c:91:b5:1b:b2:b9:17:
                    67:64:d4:6f:81:18:20:e6:a9:7c:f5:e3:49:22:ac:

    ...... 

3.4 申请数字证书

  ssl   https://www.ssl.com/certificates/basicssl/

 

  沃通

 

4.自签名证书

  在测试、内部、私密等场景下,需要创建自签名证书。 

资料:

  https://docs.azure.cn/zh-cn/articles/azure-operations-guide/application-gateway/aog-application-gateway-howto-create-self-signed-cert-via-openssl

4.1 生成服务器私钥

openssl genrsa -out private.key 4096

在目录下会生下 private.key

4.2 生成证书请求文件(CSR)

openssl req -new -key private.key -out test.csr

注意 Common Name 应输入 域名(如video.test.com),最后在目录下生成test.csr

4.3 签发证书 

使用前面生成的两个文件执行下面命令。

openssl x509 -req -days 365 -in test.csr -signkey private.key -out test.crt

生成test.crt

5.自建 CA 签发服务器证书

  创建自签 CA 证书,主要分为两个部分:

  • 创建CA 根证书
  • 签发客户端证书。

5.1 创建CA根证书

第1步:创建 CA 目录并初始化

mkdir -p ~/ssl/myca/{certs,newcerts,crl,private}

 

cd ~/ssl/myca
touch index.txt
echo "01" > serial

第2步:配置openssl.cnf 文件

把 CA 的配置文件(/etc/ssl/openssl.cnf) 拷贝到当前目录,可以对其中的参数进行修改,如:

第3步:生成根证书

openssl req -new -x509 -newkey rsa:4096 -keyout cakey.key -out cacert.crt -config openssl.cnf -days 365

注意Common Name 应输入 域名,如“audio.test.com”。结果如下:

 

  • 生成的 cacert.crt 是根证书
  • 生成的cakey.key 是证书的公钥
  • 使用cat命令可把crt与key 合并成cer文件
    cat cacert.crt cakey.key > cacert.cer 

5.2 签发证书

第1步:生成 4096 bit 的客户端私钥 

openssl genrsa -out client.key 4096

第2步:用该客户端私钥生成证书签名请求文件

openssl req -new -key client.key -out client.csr -config openssl.cnf

第3步:使用 CA 根证书签发客户端证书

openssl ca -in client.csr -out client.crt -cert cacert.crt -keyfile cakey.key -config openssl.cnf

在当前目录下生成了client.crt证书

5.3 证书转换及查看

合并crt与key 成cer文件:

cat cacert.crt cakey.key > cacert.cer

把cacert.crt 转为 DER:

openssl x509 -in cacert.crt -outform der -out cacert.der

把cacert.crt 转为 PEM:

openssl x509 -in cacert.crt -outform pem -out cacert.pem

DER 转为 PEM:

openssl x509 -in cert.crt -inform der -outform pem -out cacert.pem

转成p12 :

openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12
openssl pkcs12 -export -clcerts -in client2.crt -inkey client2.key -out client2.p12 

查看公钥:

openssl rsa -noout -text -in cakey.key 

查看证书:

openssl x509 -noout -text -in cacert.crt

6.HTTPS 验证过程

6.1 https 单向认证过程

 

其中第3步验证的主要内容如下

  • 证书是否过期;
  • 发行服务器证书的CA是否可靠;(通过查询浏览器或本机内的CA证书)
  • 返回的公钥是否能正确解开返回证书中的数字签名;
  • 服务器证书上的域名是否和服务器的实际域名相匹配; 

6.2 https 双向认证过程

注意事项 :

  • 生成根公钥证书和私钥文件(root.crt/root.key)
  • 使用根证书和根证书私钥(root.crt/root.key)配合服务器端私钥颁发服务器端证书(server.crt);
  • 使用根证书和根证书私钥(root.crt/root.key)配合客户端私钥颁发客户端证书(server.crt);
  • 将根证书(root.crt)、服务器端证书(server.crt)、服务器端秘钥(server.key)配置到Server中;
  • 客户端使用客户端私钥和根证书颁发的客户端证书(client.crt)正常访问业务。

 

posted @ 2021-09-24 17:38  f9q  阅读(1216)  评论(0编辑  收藏  举报