HTTPS相关知识

概念

HTTP(HyperText Transfer Protocol超文本传输协议)

以明文方式发送内容,不提供任何方式的数据加密,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议

HTTPSHyper Text Transfer Protocol over Secure Socket Layer基于安全套接字的超文本传输协议)

         是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL

         作用:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

SSL(Secure Sockets Layer安全套接字)

         是Web浏览器与Web服务器之间安全交换信息的协议,提供两个基本的安全服务:鉴别与保密

TSL(Transport Layer Security安全传输层)

         用于在两个通信应用程序之间提供保密性和数据完整性

对称加密与非对称加密

         对称加密:加密与解密采用相同的密钥

         非对称加密:有两个不同的密钥,任意一个都可以成为加密密钥,另外一个就是解密密钥。

公钥与私钥

         使用非对称加密时,一个密钥公之于众,称为公钥;另一个密钥除密钥拥有者,其他人都不知道,称为私钥。

数字签名

         基于非对称加密。

         服务器-->浏览器:拥有私钥的一方使用私钥对内容进行加密后发送出去,由于任何人都可以获得改私钥对应的公钥,所以拥有公钥者使用公钥对内容进行解密,能正确解密,说明该内容必然为拥有私钥的那一方发出的

         浏览器--->服务器:拥有公钥的实体使用公钥对内容进行加密,只有私钥拥有者可以进行解密

数字证书

         以数字签名的方式通过权威认证机构CA有效地进行网上认证,帮助各个实体识别对方身份

         数字证书就是一个文件,保存了某个实体的信息及该实体所拥有的私钥对应的公钥。

CA(Certificate Authority证书权威机构)

         是数字证书认证中心的简称,是指发放、管理、废除数字证书的机构。

         CA的作用是检查证书持有者身份的合法性,并签发证书(在证书上签字),以防证书被伪造或篡改,以及对证书和密钥进行管理。

SSL与CA

         CA是数字证书管理机构,SSL证书是数字证书的一种,CA签发SSL证书,https是SSL证书的一种表现形式        

https访问过程

   

自签名证书制作(自己做CA)

目标:

         server使用的文件有:ca.crt,server.crt,server.key

名词:

         证书格式:

                   证书格式转换:http://blog.csdn.net/adeyi/article/details/8299473

                   PEM格式:Base64编码的ASCII文件;通常存储服务器认证证书、中级认证证书和私钥;应用:APACHE和类似服务器;扩展名为.pem, .crt, .cer, .key

                   DER格式:二进制编码的ASCII文件;可以存储所有的证书和私钥;应用:JAVA;扩展名为.der,也有.cer, .crt

                   PKSC#7/P7B格式:base64格式;存储认证证书或证书链中的证书,不能存储私钥;应用:Windows和tomcat都支持;扩展名.p7b, .p7c, .spc

                   PKS#12/PFX格式:加密的二进制格式;存储服务器认证证书、中级认证证书和私钥;应用:Windows中导入导出认证证书和私钥;扩展名:.pfx, .p12

         CSR:Certificate Signing Request

1. 制作CA

         1.1. 为CA创建RSA私钥(des3加密并且是PEM格式)

                   openssl genrsa -des3 -out ca-key.pem 2048  # 过程中会提示输入两次CA私钥密码

                           des3--加密算法,通过des3加密算法使用输入的密码加密ca.pem文件

                            附:

                                     查看私钥的详细信息:openssl rsa -noout -text -in ca-key.pem

            去除私钥的口令:openssl rsa -in ca-key.pem -out ca-key.pem

         1.2. 为CA创建一个自签名的证书(x509结构,输出为PEM格式)

                   openssl req -new -x509 -days 365 -key ca-key.pem -out ca.pem  # 过程中会提示输入CA机构信息

                            x509--结构

                            附:

                                     查看证书信息:openssl x509 -noout -text -in ca.pem

2. 自建server证书

         2.1 生成server私钥

                   openssl genrsa -des3 -out server-key.pem 2048 

      附:

        去除私钥的口令:openssl rsa -in server.key -out ca-key.pem

         2.2 生成server证书请求

                  openssl req -subj '/CN=yc.dev.registry.com' -new -key server-key.pem -out server.csr

         2.3 使用CA签名server证书

      echo 01 > ca.srl  #生成证书序列号

       openssl x509 -req -days 365 -in server.csr -CA ca.pem -CAkey ca-key.pem -out server-cert.pem  # 需要输入CA私钥密码

                     附:

        签证完成后,会把证书请求响应和CA根证书一起返回给请求者,即server端

         2.4 server端有另一服务器通过代码访问https,需使用keytool将根证书(链)及证书请求响应导入到java的cacerts库中

                   keytool -import -alias isupcert -trustcacerts -file servercert.crt -keystore $JAVA_HOME/jre/lib/security/cacerts

                   附:

                            查看已有的证书:keytool -list -keystore cacerts -alias isupcert

                            删除某证书keytool -delete -alias isupcert -keystore cacerts

3.client信任安全证书

         ① 一般添加到浏览器的信任白名单即可使用。

         ② 但在有的操作系统中,还需要将根证书配置为系统级的证书,才允许继续使用。

    Mac OS X
       添加证书:
         sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ~/new-root-certificate.crt
       移除证书:
         sudo security delete-certificate -c ""

    Windows
       添加证书:
         certutil -addstore -f "ROOT" new-root-certificate.crt
       移除证书:
         certutil -delstore "ROOT" serial-number-hex

    Linux (Ubuntu, Debian)
       添加证书:
         1.复制 CA 文件到目录: /usr/local/share/ca-certificates/
         2.执行: sudo cp foo.crt /usr/local/share/ca-certificates/foo.crt
         3.更新 CA 证书库: sudo update-ca-certificates
       移除证书:
         1.Remove your CA.
         2.Update the CA store:
           sudo update-ca-certificates --fresh
      Restart Kerio Connect to reload the certificates in the 32-bit versions or Debian 7.

    Linux (CentOs 6)
       添加证书:
         1.安装 ca-certificates package: yum install ca-certificates
         2.启用dynamic CA configuration feature: update-ca-trust force-enable
         3.Add it as a new file to /etc/pki/ca-trust/source/anchors/: cp foo.crt /etc/pki/ca-trust/source/anchors/
         4.执行: update-ca-trust extract
      Restart Kerio Connect to reload the certificates in the 32-bit version.

    Linux (CentOs 5)
       添加证书:
         Append your trusted certificate to file /etc/pki/tls/certs/ca-bundle.crt: cat foo.crt >> /etc/pki/tls/certs/ca-bundle.crt

  ③ 如果还不行,则需要将我们生成的CA证书ca.pem文件内容放入系统的CA bundle文件当中

    以Ubuntu为例:

      sudo -i

      cat ca.pem >> /etc/ssl/certs/ca-certificates.crt

      update-ca-certificates

      /etc/init.d/docker restart

    其他操作系统的CA bundle文件可能位置:

      /etc/ssl/certs/ca-certificates.crt
      /etc/ssl/ca-bundle.pem
      /etc/ssl/cert.pem
      /usr/local/share/certs/ca-root-nss.crt

参考:

  如何添加自定义CA根证书到操作系统获得信任

    https://www.qiansw.com/add-the-ca-root-certificate-to-the-operating-system-for-trust.html

  SSLCA

    http://blog.csdn.net/lzs109/article/details/6960461

  搭建docker-registry时使用自签名ssl证书认证问题

    https://www.webmaster.me/server/docker-registry-with-self-signed-ssl-certificate.html

posted @ 2017-07-12 23:00  yc紫日  阅读(627)  评论(1编辑  收藏  举报