最近因为业务需求,需要将http改成https。所以写了一下关于https相关的东西。
搞https就必须要知道http。http叫超文本传输协议,一种无状态的协议。在网络的7层结构(应用层,表示层,会话层,传输层,网络层,数据链路层,物理层)当中处于应用层的协议。应用层的协议当然还有其他比如SMTP,FTP,POP3等。而https,是在应用层下建立一个SSL或者说TLS的安全链接通道。http通道的默认端口是80,https是443.当然这种都是可以配置的。
下面主要讲https请求的一个大概过程:
1.在浏览器中输入一个https的网站的地址:例如https://www.baidu.com
2.服务端会有一个公钥和私钥,当有一个https请求的时候,服务端下发一个公钥给浏览器。
3.浏览器的TLS部分会对这个公钥就行验证,比如你是去正规机构申请过CA证书的,浏览器验证就会通过。然后浏览器利用这个公钥通过非对称加密算法加密一个随机数,发送给服务端。
4.服务端利用私钥解密解出浏览器的随机数,然后通过随机数利用对称加密算法加密返回的内容。
5.浏览器得到加密的内容通过之前的产生的随机数进行解密,得到服务端返回的数据。
上面提到一个CA证书,这个需要简单介绍下:
CA证书自己也可以制作,但是像chrome,firefox等浏览器都不信任自己制作的证书的,访问自己证书的https网站一般都会弹出一个警告,如下图所示:
所以这个CA证书必须要是要权威机构申请才能得到浏览器的信任。
自己制作CA证书过程如下(我当时用的mac os制作的):
1.生成私钥。openssl genrsa -des3 -out server.key 1024 (建议用2048)
2.利用私钥生成证书。openssl req -new -key server.key -out server.csr。生成过程需要输入一些资料
3.生成服务器私钥。cp server.key server.key.org,openssl rsa -in server.key.org -out server.key
4.利用服务器私钥生成签名后的证书。openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
按以上操作完成后会生成4个文件:
接下来是配置服务器相关。我项目比较简单,主要是给app提供接口。所以才用nginx+tomcat的方式。
外网端口配置的是8080,tomcat的访问端口是8011。配置https如下图所示:
当然这个证书只是自己生成,正式上线还是需要用到权威机构审核过的证书及私钥。