目前开发的网站是普通的http网站,为了提高网站安全性,大概主要有三种方法
1.应用自行对传递的数据进行加密处理
优点:灵活性非常高
缺点:上传下载的流数据没法在浏览器中进行干扰(除非使用flash等插件,这里主要指用form提交下载数据),所以无法保证这种数据的安全。
提高了系统复杂度。
2.使用VPN保证数据安全
优点:本人认为这是最安全的方式,速度快
缺点:要求所有访问系统的人必须进行VPN连接,对用户量大的系统非常不方便
3.使用 https 代理
优点: 无需改造现有Web系统,只需要在Web应用和用户之间加一层https代理,实现简单,安全性很高
缺点: 正规机构颁发的https证书是要钱的,使用自签发证书浏览器会有安全提示,而且确实有可能被第三方伪造而用户无法识别,
但个人认为如果直接使用ip访问而不用域名访问应该没什么大问题
本文主要记录对第三种方案的实现
第一步,使用openssl 制作秘钥和证书
openssl下载地址 : http://slproweb.com/products/Win32OpenSSL.html
通过命令行运行如下命令:
创建秘钥(文件里面包含公钥和私钥):
openssl genrsa -des3 -out server.key 1024
创建签名请求的证书:
openssl req -new -key server.key -out server.csr
提取私钥:
openssl rsa -in server.key.org -out server_private.key
生成证书:
openssl x509 -req -days 3650 -in server.csr -signkey server_private.key -out server.crt
第二步,https代理服务器使用nginx就可以(nginx 真是个负载均衡,反向代理,集群的无上法宝啊~~~,在这里十分感谢nginx开发们),nginx 配置如下
upstream real_server {
server 192.168.1.4:80;
keepalive 2000;
}
server {
listen 443 ssl;
server_name localhost;
ssl on;
ssl_certificate C:\OpenSSL-Win64\bin\server\server.crt;
ssl_certificate_key C:\OpenSSL-Win64\bin\server\server_private.key;
ssl_verify_client off;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://real_server/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 60;
proxy_read_timeout 600;
proxy_redirect http:// $scheme://;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
最后启动 nginx 就可以了~~~