首页 > 代码库 > HTTPS相关知识
HTTPS相关知识
概念
HTTP(HyperText Transfer Protocol超文本传输协议)
以明文方式发送内容,不提供任何方式的数据加密,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议
HTTPS(Hyper 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
SSL与CA
http://blog.csdn.net/lzs109/article/details/6960461
HTTPS相关知识