简单的说,https可以称之为http的安全版本,使用https可以保护我们的敏感数据,特别是在用户登陆、交易等场景下,尤其需要防止数据被截取、篡改。
下面以nginx为例,介绍一下nginx服务器配置https网站的方法。关于nginx的安装,这里就不做介绍了,要配置https,编译安装时需要ssl模块,已经安装了nginx可以通过命令查看是否包含了ssl模块(是否包含了参数:--with-http_ssl_module):
root@dayuanzi-ThinkCentre-XXXX:/home/dayuanzi# /usr/local/nginx/sbin/nginx -V nginx version: nginx/1.9.2 built by gcc 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04) built with OpenSSL 1.0.2d 9 Jul 2015 TLS SNI support enabled configure arguments: --with-http_ssl_module --with-pcre=../pcre-8.36 --with-zlib=../zlib-1.2.8 --with-openssl=../openssl-1.0.2d
没有的话,重新编译安装即可。下面,是生成秘钥,证书等文件,需要用到openssl
// 生成一个RSA密钥 # openssl genrsa -des3 -out rsatest.key 1024 // 拷贝一个不需要输入密码的密钥文件 # openssl rsa -in rsatest.key -out rsatestnopw.key // 生成一个证书请求 # openssl req -new -key rsatest.key -out rsatest.csr // 签发证书 # openssl x509 -req -days 365 -in rsatest.csr -signkey rsatest.key -out rsatest.crt
作为测试,这里生成的证书我没有向证书认证机构认证,浏览器访问时会提醒是不受信任的证书
下一步,是把证书配置到nginx,如下所示:
然后重启nginx,就可以通过https访问服务器了。server { listen 443; server_name localhost; ssl on; ssl_certificate /home/dayuanzi/temp/rsamiyao.csr; # 这里配置了没有设置密码的秘钥,否则每次启动nginx都需要输入密码,比较麻烦 ssl_certificate_key /home/dayuanzi/temp/rsamiyaonopw.key; index index.jsp index.html; root /home/default; location ~ .* { proxy_pass http://site; proxy_set_header X-Real-IP $remote_addr; } }
我们可以通过抓包工具查看访问时的数据,比如使用wireshark,http访问时可以查看到所有请求数据,https访问时看到的则是乱码