加密
对称加密是使用的同一把密匙进行加密和解密。那么,非对称加密自然是使用不同的密钥进行加密和解密啦。
非对称加密有两个钥匙,及公钥(Public Key)和私钥(Private Key)。公钥和私钥是成对的存在,如果对原文使用公钥加密,则只能使用对应的私钥才能解密;因为加密和解密使用的不是同一把密钥,所以这种算法称之为非对称加密算法。
非对称加密算法的密匙是通过一系列算法获取到的一长串随机数,通常随机数的长度越长,加密信息越安全。通过私钥经过一系列算法是可以推导出公钥的,也就是说,公钥是基于私钥而存在的。但是无法通过公钥反向推倒出私钥,这个过程的单向的。
根据上图,我们可以看到,对于原文,通过接收方的公钥进行加密,发送给接收方,接收方拿到密文后,通过自己的私钥可以解密,获取原文信息。在这个过程中,即使接收方公钥泄漏,也不会导致消息泄漏,因为密文只能通过接收方的私钥才能打开。所以,信息安全过程中,接收方只需要保管好自己的私钥不泄露即可。
同样,当接收方向发送方发送消息时,接收方将密文通过原发送方的公钥进行加密,原发送方通过自己的私钥才可解密。
总结一下
1,公钥和私钥成对出现
2,公开的密钥叫公钥,只有自己知道的叫私钥
3,用公钥加密的数据只有对应的私钥可以 解密
4,用私钥加密的数据只有对应的公钥可以解密
5,如果可以用公钥解密,则必然是对应的私钥加的密
6,如果可以用私钥解密,则 必然是对应的公钥加的密
就是通信双方都有一对密钥,自己掌握私钥,公钥给对方,这样比较麻烦。
数字签名
现在我们知道用公钥加密,然后用私钥来解密,就可以解决安全传输的问题了。如果我用私钥加密一段数据(当然只有我可以用私钥加密,因为只有我知道 2是我的私钥),结果所有的人都看到我的内容了,因为他们都知道我的公钥是1,那么这种加密有什么用处呢?
但是我的好朋友x说有人冒充我 给他发信。怎么办呢?我把我要发的信,内容是c,用我的私钥2,加密,加密后的内容是d,发给x,再告诉他解密看是不是c。他用我的公钥1解密,发现果然 是c。这个时候,他会想到,能够用我的公钥解密的数据,必然是用我的私钥加的密。只有我知道我得私钥,因此他就可以确认确实是我发的东西。这样我们就能确 认发送方身份了。这个过程叫做数字签名。当然具体的过程要稍微复杂一些。用私钥来加密数据,用途就是数字签名。
总结一下
1,用公钥加密数据,用私钥来解密数据
2, 用私钥加密数据(数字签名),用公钥来验证数字签名。
在实际的使用中,公钥不会单独出现,总是以数字证书的方式出现,这样是为了公钥的安 全性和有效性。
SSL
我和我得好朋友x,要进行安全的通信。这种通信可以是QQ聊天,很频繁的。用我的公钥加密数据就不行 了,因为:
1,我的好朋友x没有公私钥对,我怎么给他发加密的消息啊? (注:实际情况中,可以双方都有公私钥对)
2,用公私钥加密运算 很费时间,很慢,影响QQ效果。
好了,好朋友x,要和我通信,向我打了个招呼,我把包含公钥的数字证书和公钥一起发给了他,他用公钥解密这个加密的公钥,如果一至,说明是我发的,然后他算出一个数字3,用我的公钥1,加密后发给我,说,我们以后就用这个数字来加密信息吧。 我解开后,得到了数字3。这样,只有我们两个人知道这个秘密的数字3,别的人都不知道,因为他们既不知x挑了一个什么数字,加密后的内容他们也无法解开, 我们把这个秘密的数字叫做会话密钥。
然后,我们选择一种对称密钥算法,比如DES,(对称算法是说,加密过程和解密过程是对称的,用一个 密钥加密,可以用同一个密钥解密。使用公私钥的算法是非对称加密算法),来加密我们之间的通信内容。别人因为不知道3是我们的会话密钥,因而无法解密。
总结一下
1,SSL实现安全的通信
2,通信双方使用一方或者双方的公钥来传递和约定会话密钥 (这个过程叫做握手)
3, 双方使用会话密钥,来加密双方的通信内容
上面说的是原理。大家可能觉得比较复杂了,实际使用中,比这还要复杂。不过庆幸的是,好心的先行 者们在操作系统或者相关的软件中实现了这层(Layer),并且起了一个难听的名字叫做SSL,(Secure Socket Layer)。
独立证书服务器
ip地址分配
证书服务器 61.100.100.100
web服务器 61.100.100.200
防火墙 wan 61.100.100.1
lan 192.168.100.1
客户端 192.168.100.100
安装证书服务器
防火墙和路由
在wan口上做nat
从内部客户端主机通过nat可以ping通外部主机
web服务器
web服务器使用证书服务
在web服务器上
复制下来
打开证书申请页面
id一致
web服务器上,下载证书,导入证书
证书有问题,因为本服务器没有包含该证书颁发机构,需要增加信任
再下载一个证书为信任证书,导入信任机构中
再查看证书,已没有问题
网站绑定证书
在ca服务器上访问web没问题
在其他客户端访问有问题
原因是证书颁发机构不在本机的信任机构中。
ssl加密
web服务器必须有公钥和私钥
- 客户端必须发起请求
- web服务器用私钥封装公钥,并携带公钥发送给客户端
- 客户端收到公钥后,在本地生成一个128位的key
- 客户端用公钥加密这个key,并把key传给服务器
- 服务器用私钥解开公钥得到这个key,两端都有了key
- 双方最终通过这个key加密传输数据,最终数据传输层面是对称加密,效率高;而握手阶段生成key是非对称加密,效率低。
证书转换
openssl将私钥和crt证书合成pfx证书
pfx是什么文件:
公钥加密技术12号标准(Public Key Cryptography Standards #12,PKCS#12)为存储和传输用户或服务器私钥、公钥和证书指定了一个
可移植的格式。它是一种二进制格式,这些文件也称为PFX文件。开发人员通常需要将PFX文件转换为某些不同的格式,如PEM或JKS,以便可以为使用SSL通信的独立Java客户端或WebLogic Server使用 是一种Microsoft协议,使得用户可以将机密信息从一个环境或平台传输到另一个环境或平台。使用该协议,用户就可以安全地将个人信息从一个计算机系统导出到另一个系统中。
iis配置ssl
在IIS配置ssl的时候,安装服务器证书,发现安装后,刷新下证书就消失了,在编辑绑定的时候,可选证书中也没有安装的证书。
原因是我的证书文件的证书申请并不是在我的服务器上申请的,因此只安装crt证书会出现这种情况。
解决此问题的办法是利用openssl将私钥和服务器crt证书合成.pfx证书,然后在IIS中导入该pfx证书即可。
步骤
下载安装openssl
这里我们直接使用安装包进行安装(也可自己编译),选择对应版本进行下载下载。
运行安装程序Win64OpenSSL-1_0_2e.exe,将openssl安装到C:\OpenSSL-Win64。
安装完成后,可以在控制台运行如下指令,来测试是否安装成功。
openssl version
如果返回openssl版本号(”OpenSSL 1.0.2e 3 Dec 2015”),则表示安装成功。
合成.pfx证书
将私钥文件(server.key)和服务器crt证书文件(server.crt ),放到openssl安装目录的bin目录下。
控制台也进到此目录下,然后执行下面指令。
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt
然后再看bin目录下面多了一个server.pfx 文件,即为生成的pfx证书文件。
以上,将pfx导入到IIS后,就可以进行绑定了。