数字证书认证这点事, SSL/TLS,OpenSSL
1.概念
数字证书
HTTPS请求时,Server发给浏览器的认证数据,用私钥签名,并且告诉浏览器公钥,利用公钥解密签名,确认Server身份。
证书还会指明相应的CA,CA能确认证书是否真的是CA颁发的。
可以用PEM、等编码
SSL/TLS
SSL是上世纪由Netscape设计的web安全协议,并获得了广泛应用,SSLv2.0, v3.0,目前主要是v3
TLS是ITEF将SSL协议标准化了,TLSv1.0,v1.1,v1.2。
其实TLSv1.0跟SSLv3.0差异很小,几乎一样。
openSSL: 一个开源的实现了SSL/TLS协议的库,包括3部分内容。
a. SSL_xxx带头的API,支持SSL/TLS协议
其中SSL* 这个结构最重要,调用openSSL API都会拿这个handle
最后类似socket一样提供 SSL_read(SSL* buf,bufsize), SSL_write(SSL* buf,bufsize)
b. X509_xxx, AES_xxx, RSA_xxx MD5_xxx等API, 支持业界通用的证书认证、加解密等功能。
c. 提供一些二进制工具,用来生成证书、签名、加解密等功能。
2.数字证书认证流程
2.1跟服务器TCP连接
2.2服务器传送证书给浏览器
a. signedCertificate
版本、序列号(CA据次确定证书)、签名的算法
颁发者(CA)的可识别名称: countryName, stateName, localityName,
OrganizationUnit, OrganizationName, commonName(有效的 DNS 名称)
有效期、
证书名称: OrganizationUnit, OrganizationName, commonName
证书的算法及公钥
扩展
b. algorithmId: 证书的签名算法
c. encryptedData: 证书签名值,CA对证书签名后的值,结合CA的私钥,使用algorithmID对应的算法生成。
2.3浏览器如何验证
浏览器根据证书的CA的公钥,对证书签名部分解密,解密成功则证书是CA颁发的。
3.使用代理时,如何处理证书认证
代理可以有很多种,http代理,socket代理等。
socket的代理,可以代理就不需要处理证书了,仅仅作为一个bridge。
4.补充
openSSH: 是 SSH (Secure SHell) 协议的免费开源实现。SSH协议族可以用来进行远程控制,用来加密远程控件和文件传输过程中的数据。