首页 > 代码库 > HTTPS相关知识

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 1024

                           des3--加密算法

                            过程中会提示输入密码,通过des3加密算法使用输入的密码加密ca.key文件

                            附:

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

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

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

                   openssl req -new -x509 -days 365 -key ca.key -out ca.crt

                            x509--结构

                            附:

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

2. 自建server证书

         2.1 生成server私钥

                   openssl genrsa -des3 -out server.key 1024

         2.2 生成server证书请求

                   openssl req -new -key server.key -out server.csr

         2.3 使用CA签名server证书

                   openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -out servercert.crt

                   签证完成后,会把证书请求响应和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根证书到操作系统获得信任

    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

HTTPS相关知识