在如今网络安全越来越被大众所重视,笔者虽然了解过https加密协议,但却还没有在自己服务器上部署过,趁着假期,在自己的机器上实践了一番,效果点击:Gitos Home
HTTPS 背景
什么是HTTPS?
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL, 它是一个URI scheme(抽象标识符体系),句法类同http:体系,用于安全的HTTP数据传输。
https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司(Netscape)进行,并内置于其浏览器Netscape Navigator中,提供了身份验证与加密通讯方法。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。
HTTPS和HTTP的区别
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。
为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
HTTPS和HTTP的区别主要为以下四点:
- https协议需要到ca申请证书,一般免费证书很少,需要交费。
- http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
实践
今天实践的系统环境是Centos6.6 X64, web服务器为Apache
如果您的服务器是 Nginx 或者其他服务器,笔者暂时也没尝试过,但原理都差不多,只是具体到配置时需要分别处理
获取SSL证书
想要部署https加密访问,首要要做的就是获取SSL证书。如果是学习的话,获取免费的就可以了,这里推荐 沃通免费证书 。
如果是正规商业用途,还是用专业级别的证书吧, 沃通 就有专业级别的证书 ,另外笔者还买过国外便宜的证书: Namecheap
服务器端SSL证书请求文件(CSR)生成
检查服务器是否支持ssl模块
检查是否有mod_ssl.so文件,如无请重新编译Apache让其支持ssl
生成私钥 Generate the private key
请在服务器端使用以下命令来生成私钥
openssl genrsa -des3 -out www.mydomain.com.key 2048
此命令会要求输入证书密码,请输入一个能记住的密码;命令中 www.mydomain.com 为您的域名即可;2048为私钥长度,这里是沃通要求,其他请按照情况选择1024或2048
生成CSR文件 Generate the CSR
请在服务器端使用以下命令来生成CSR
openssl req -new -key www.mydomain.com.key -out www.mydomain.com.csr
此处需要填写很多信息
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:shanghai
Locality Name (eg, city) [Default City]:shanghai
Organization Name (eg, company) [Default Company Ltd]:gitos
Organizational Unit Name (eg, section) []:bqteam-gitos
Common Name (eg, your name or your server's hostname) []:www.gitos.cn
Email Address []:a@gitos.cn
注意上面倒数第二行 Common Name ,此处一定要填写您开启https访问的域名,不能随便填写
您也可以直接使用一个命令同时生成私钥和CSR文件:
openssl req -new -nodes -keyout www.mydomain.com.key -out www.mydomain.com.csr
用SSL证书请求文件(CSR)获取证书
将www.mydomain.com.csr内的内容粘贴到证书发放的网站,获取到您的证书,下载后传到您的服务器,下面配置将用到它
配置Apache服务器
<VirtualHost *:443>
DocumentRoot "/path" //设置网页存放目录
ServerName www.gitos.cn:443 //服务器的端口
DirectoryIndex index.html index.html.var //首页名称
SSLEngine on
SSLCertificateFile /path/www.mydomain.com.crt //证书
SSLCertificateKeyFile /path/tls/www.mydomain.com.key //私钥
SSLCACertificateFile /path/1_root_bundle.crt
<Directory "/path">
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
配置完成后,重启Apache,访问https://www.gitos.cn,发现配置已经成功。
完善Apache服务器配置
到此,访问https://www.gitos.cn已经没有任何问题,但是如果用户通过80端口访问,也就是通过http协议访问网站时,会出现一个大大地错误或者出现Apache默认页面,非常的不友好,毕竟浏览器默认访问端口为80端口
为了解决它,那么就要使用一些技巧啦。最常用的呢就是用端口重定向使所有80端口的访问转到443端口即可,有很多方法可以解决,比如nginx自带重定向功能,但是这里用的Apache,那么就给一个Apache的解决方案吧
使用Rewrite模块进行重定向,将下列语句添加在配置文件中或者程序的.htaccess中,如果没有安装这个模块请重新编译安装
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{REQUEST_URI} !^/tz.php
RewriteRule (.*) https://%{SERVER_NAME}$1 [R]
至此结束啦,有问题欢迎指正