自签名https证书实现流程
1. https的流程示意图
https安全通信机制流程详解:
客户端发送 https 请求,把自身支持的秘钥算法套件(SSL 指定版本、加密组件列表)发送给服务器
服务器判断自身是否支持该算法套件,如果支持则返回证书信息(本质为公钥,包含了证书颁发机构,网址,过期时间等) ,否则断开连接,
客户端解析证书(通过 TLS 协议来完成),验证证书是否有效。如果异常,则会提示是否安装证书,常见的就是浏览器搜索栏左侧出现“X”告警按钮等。
如果证书有效、或者是授信安装证书后,开始传送加密信息(用证书加密后的随机值,供加解密使用)
服务端通过私钥解密加密信息,得到客户端发送来的随机值,然后把内容通过该值进行对称加密。这样一来,除非知道私钥,否则是无法获取加密内容的。
服务端返回加密后的内容
客户端通过前面提到的随机值对加密信息进行解密
证书验证过程
SSL 证书中包含的具体内容有证书的颁发机构、有效期、公钥、证书持有者、签名,通过第三方的校验保证了身份的合法
检验基本信息:首先浏览器读取证书中的证书所有者、有效期等信息进行一一校验
校验 CA 机构:浏览器开始查找操作系统中已内置的受信任的证书发布机构 CA,与服务器发来的证书中的颁发者 CA 比对,用于校验证书是否为合法机构颁发;如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的。
解密证书:如果找到,那么浏览器就会从操作系统中取出 颁发者 CA 的公钥,然后对服务器发来的证书里面的签名进行验证。
比对 hash 值:浏览器使用相同的 hash 算法计算出服务器发来的证书的 hash 值,将这个计算的 hash 值与证书中签名做对比
对比结果一致,则证明服务器发来的证书合法,没有被冒充
此时浏览器就可以读取证书中的公钥,用于后续加密了
扩展:CA 证书
CA 是证书颁发机构的简称,它会给自己签发一个根证书 Root CA,并且 CA 会通过根证书来签发中间证书,授权中间证书颁发机构签发证书的权限,最后由中间证书颁发机构向用户签发用户证书。之所以多一层中间证书是为了保护根证书,减少根证书被攻击或者被破解的风险。当然中间证书可能不止一个。因此通常用户收到的证书是 3 个:根证书、中间证书、用户证书。事实上,申请到的证书只是用户证书,其他 2 个很早就被签发了。
浏览器为何新任 CA 证书呢?
因为 CA 是被 WebTrust 信任的第三方组织,且只有通过 WebTrust 国际安全审计认证的证书颁发机构 CA,其签发的证书才会被各大浏览器信任。根证书库包含浏览器信任的证书颁发机构 CA 的根证书,有的浏览器会自建根证书库,比如 Mozilla Firefox,有的浏览器会使用其他浏览器的根证书库。
浏览器如何校验证书合法性呢?
由于用户证书被中间证书信任,而中间证书被根证书信任,根证书又被浏览器信任,这样一个完整的证书链使得浏览器可以在根证书库内一次检索用户证书、中间证书和根证书,如果能匹配到根证书,那么这一信任链上的所有证书都是合法的。
2. 在windows客户端通过openssl命令生成
下面是生成自签名证书,仅为测试使用,需要在访问者浏览器导入自己生成的ca根证书。生产环境请像ca申请证书。 下面红色文字其实就是我们像ca申请证书我们需要做的,黑色部分是ca实现,并且ca的私钥自己保存不会泄露给第三方,ca用私钥生成的带签名证书会内置到浏览器里面。
// 生成服务器端私钥
openssl genrsa -out server.key 2048
//生成服务端公钥
openssl rsa -in server.key -pubout -out server.pem
//生成CA私钥
openssl genrsa -out ca.key 2048
//生成ca的csr文件
openssl req -config "F:\greensoft\openssl\openssl.cnf" -new -key ca.key -out ca.csr
//生成ca的自签名证书
openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt
//生成server.csr文件
openssl req -config "F:\greensoft\openssl\openssl.cnf" -new -key server.key -out server.csr
//生成带有ca签名的证书
Openssl x509 -req -days 365 -sha256 -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt
3.浏览器导入ca的自签名证书ca.crt
自签名证书需要导入
about:preferences#privacy 隐私与安全 证书 查看证书 个人 导入
4.然后在浏览器打开https发现就可以了
导入之后可以忽略警告访问,不导入没法忽略警告继续访问。
版权声明:若无特殊注明,本文皆为《菜鸟站长》原创,转载请保留文章出处。
本文链接:自签名https证书实现流程 - https://wlphp.com/?post=357