zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    object-c中NSString与int和float的相互转换
    Keras
    TensorFlow白皮书
    java split进行字符串分割
    Java进行post和get传参数
    MySQL 导出数据
    解析xml并且导入mysql
    MySQL显示中文
    java使用sax解析xml
    mysql connection refused
  • 原文地址:https://www.cnblogs.com/yc913344706/p/7158089.html
Copyright © 2011-2022 走看看