Node.js的TLS/SSL模块详解

第一步:我们自己扮演CA机构,给自己的服务器颁发签名证书,这个证书是CA机构的证书

openssl genrsa -out ca.key 1024
//这里是CA生成的私钥,文件名为ca.key
openssl req -new -key ca.key -out ca.csr
//这里是CA通过自己的私钥生成CSR文件,文件名为ca.csr
openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt
//这里是通过把CA的csr文件用私钥进行签名,最后生成一个证书的过程,证书名字为ca.crt
上面产生的文件是扮演CA角色需要的文件

第二步:服务器向CA机构申请签名证书,但是在申请签名证书之前要创建自己的CSR文件,但是这个过程中的Common Name要匹配服务器域名,否则后续认证会报错

openssl genrsa -out server.key 1024
//这里是产生了服务器的私钥
openssl req -new -key server.key -out server.csr
//通过服务器的私钥产生CSR文件
openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt
//这里为服务器产生了一个得到CA签名的证书,证书名字为server.crt。产生证书需要CA机构的证书文件ca.crt以及CA机构的私钥的参与
注意:这里我们很容易注意到我们要产生通过CA认证的证书是需要 CA的私钥和CA证书的参与的!客户端发起安全连接之前需要获取服务器端的证书,并通过CA的证书验证服务器端证书的真伪,除了验证真伪以外还需要对服务器的名称,IP地址进行验证。

我们来看看证书中包含什么内容:



这个证书是内置在浏览器中的,我们已经知道证书的格式了,我们再看看证书的验证是怎么样的过程:


很显然,当把证书发送到客户端以后会被发送到CA机构进行认证,如果认证通过才是合法的请求。具体过程如下:

服务器证书的验证->服务器身份的验证

1,  通过https建立一个安全web事务之后,浏览器会自动获取所连服务器的数字证书;
其中服务器证书包括了:
        Web站点名称和主机名
        Web站点的公钥;
        颁发机构的名称;
        颁发机构给证书的签名;
2,  若服务器没有证书,则安全连接失败。
3,  浏览器首先检查服务器证书是否还在有效期内,若过期,则提示失效;
4,  浏览器查看服务器证书对应的CA,若该CA是很权威的机构,则浏览器可能已经知道了对应的公钥了(浏览器会预先安装很多签名颁发机构的证书并认为是受信任的),这时,浏览器用CA的数字证书里面的公钥来验证该CA颁发的服务器证书的有效性。类似去公安局验证某人的身份证是否是真的。
5,则浏览器对签名颁发机构CA一无所知,浏览器无法确定是否该信任这个签名颁发机构,它通常会向用户提示一个对话框,看看他是否相信这个签名发布者。
6,  一旦完成了对服务器证书的验证,接下来就可以使用服务器证书里面的公钥进行服务器身份的验证;
7,  客户端生成一个随机数给到服务器,要求对应的服务用对应服务器证书是私钥进行签名。
8,  服务器对随机数进行签名,并回传给到客户端。
9,  客户端用服务器证书的公钥对随机数的签名进行验证,若验证通过,则说明对应的服务器确实拥有对应服务器证书的私钥,因此判断服务器的身份正常。否则,则任务服务器身份被伪造。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值