Web Server之如何支持https

来源:互联网 发布:南昌大学软件学院吧 编辑:程序博客网 时间:2024/06/03 16:46

标签(空格分隔): web https


概述

首先明确一个问题, 为什么要使用https?https是基于SSL的http协议,客户端和服务器之间的数据是通过加密的方式传输的,区别于http的明文传输。设想一下这个场景,在传输过程中经过了一个代理,如果使用明文传输(http),那么代理将获取到传输过程中的所有信息,因此对传输的信息进行加密是很有必要的。实际情况就是这样, 网络资源在客户端与服务端之间传输,必然会经过很多层中间代理,使用https能确保传输的安全性。
https的详细信息介绍不在我们本次讨论的范畴,有兴趣的同学可以参考这个: http://blog.jobbole.com/110373/。
回归到本文的主题,如何如何让一个网站支持https?

申请证书

所谓证书就是指数字证书,好比一个机构或人的签名,能够证明这个结构或人的真实性。我们可以通过国际公认的证书颁发机构申请证书,这样的证书是可以被客户端识别的。本文也不做过多的介绍,假定我们证书申请好了,包括两个部分.key、.pem,大致情况如下:
image_1ba1ki499ul56k7sdvpub107j9.png-6.3kB

具体证书的生成可以参考本文:http://www.cnblogs.com/kyrios/p/tls-and-certificates.html

配置

本文讲述通过nginx搭建https环境,可以做如下处理:

Nginx通过yum安装,配置文件路径/etc/nginx

  • 1 将证书上传到虚机,如/etc/nginx/cert/*
  • 2 修改nginx配置,如在中新增一个配置文件www.shushanfx.com.conf:
server {    listen 443 http2 default_server;    listen [::]:443 ssl http2 default_server;    # 使用你自己的域名    server_name www.shushanfx.com;    ssl on;     root /shushanfx/nginx/html;    index index.html index.htm;    ssl_certificate   "/etc/nginx/cert/214024137860950.pem";    ssl_certificate_key  "/etc/nginx/cert/214024137860950.key";    ssl_session_timeout 5m;    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;    ssl_prefer_server_ciphers on;    location / {    }    error_page 404 /404.html;        location = /40x.html {    }           error_page 500 502 503 504 /50x.html;        location = /50x.html {    }}
  • 3 重启nginx

注意事项:

  1. nginx在默认情况下会关闭https,在搭建时需要确保安装ngx_http_ssl_module,如果未安装则需要添加该模块。即重新编译生成nginx代码,并配置参数 –with-http_ssl_module
    [root@localhost nginx-1.10.2]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module
  2. 对于自己生成的证书,浏览器默认是不识别的,需要手动接受加密证书。

参考文献:

  1. HTTPS为什么更安全,先看看这些: http://blog.jobbole.com/110373/
  2. 浅谈https\ssl\数字证书: http://www.cnblogs.com/P_Chou/archive/2010/12/27/https-ssl-certification.html
  3. 如何生成https证书: http://www.cnblogs.com/kyrios/p/tls-and-certificates.html
原创粉丝点击