Nginx搭建https服务器

Posted by Kaka Blog on April 17, 2019

HTTPS介绍

HTTPS(Hyper Text Transfer Protocol Secure),是一种基于SSL/TLSHTTP,所有的HTTP数据都是在SSL/TLS协议封装之上进行传输的。HTTPS协议是在HTTP协议的基础上,添加了SSL/TLS握手以及数据加密传输,也属于应用层协议。Https使用的默认端口是443。

目前,应用最广泛的是TLS 1.0,接下来是SSL 3.0。但是,主流浏览器都已经实现了TLS 1.2的支持。

TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。

优点:

  • 所有信息都是加密传播,第三方无法窃听。
  • 具有校验机制,一旦被篡改,通信双方会立刻发现。
  • 配备身份证书,防止身份被冒充。

SSL证书

运行过程

SSL/TLS协议的基本思路是采用公钥加密法,也就是说,客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。

客户端在向获取公钥的时候,有可能出现公钥被劫持的问题,所以就需要使用SSL证书和CA机构。

服务器会给客户端发送SSL证书,浏览器开始查找操作系统中已内置的受信任的证书发布机构CA,进行对比,如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的。如果找到,那么浏览器就会从操作系统中取出颁发者CA的公钥,然后对服务器发来的证书里面的签名进行解密。

获取SSL证书

下面介绍几个免费的SSL证书提供商:(以下内容非原创)

  • CloudFlare SSL:CloudFlare是美国一家提供CDN服务的网站,在世界各地都有自己的CDN服务器节点,国内外很多大型公司或者网站都在使用 CloudFlare的CDN服务(百度云cdn加速在海外用的就是CloudFlare的CDN节点),当然国内站长最常用的就是CloudFlare的免费CDN,加速也很好。CloudFlare提供的免费SSL证书是UniversalSSL,即通用SSL,用户无需向证书发放机构申请和配置证书就可以使用的SSL证书,CloudFlare向所有用户(包括免费用户)提供SSL加密功能,web界面5分钟内就设置好证书,24小时内完成自动部署,为网站的流量提供基于椭圆曲线数字签名算法(ECDSA)的TLS加密服务。
  • Wosign沃通SSL:Wosign沃通是国内一家提供SSL证书服务的网站,其免费的SSL证书申请比较简单,在线开通,一个SSL证书只能对应一个域名(单一域名,非通配域名),支持证书状态在线查询协议(OCSP)。
  • StartSSL:StartSSL是StartCom公司旗下的SSL证书,提供免费SSL证书服务,且StartSSL被包括Chrome、Firefox、IE 在内的主流浏览器支持,几乎所有的主流浏览器都可以正常识别StartSSL,任何个人都可以从StartSSL中申请到免费一年的SSL证书。
  • NameCheap:NameCheap是一家领先的ICANN认可的域名注册和网站托管公司,成立于2000年。该公司提供免费DNS解析,网址转发(可隐藏原URL,支持301重定向)等服务。此外,NameCheap还提供了一年的SSL证书免费服务。
  • CloudFlare SSL和Wosign沃通SSL申请开通和安装使用:https://www.freehao123.com/cloudflare-wosign-ssl/
  • StartSSL申请:https://www.freehao123.com/startssl-ssl/
  • 在Nginx上配置NameCheap免费SSL:http://linux.it.net.cn/CentOS/course/2014/0318/520.html

环境准备

  • ubuntu服务器
  • 已安装好Nginx

让Nginx支持SSL

1、检查Nginx是否安装SSL模块

sudo /usr/local/nginx/sbin/nginx -V

2、如果没有安装SSL,则需要安装SSL模块

进入Nginx源码目录,执行下面命令:

./configure --with-http_ssl_module

3、重新编译Nginx

sudo make

make后,在源码根目录的objs目录中多了一个nginx程序,就是新编译的nginx程序。需要覆盖旧的Nginx程序。

sudo make install # 覆盖安装

制作CA证书

需要两个文件:

  • SSL证书:.crt
  • 私钥文件:.key

1、使用openssl工具生成一个RSA私钥

openssl genrsa -des3 -out ca.key 2048 

des3算法,2048位强度,ca.key是秘钥文件名.

注意:生成私钥,需要提供一个至少4位的密码。

2、生成CA证书

openssl req -new -x509 -days 365 -key ca.key -out ca.crt

配置Nginx

vi /usr/local/nginx/conf/nginx.conf

配置文件内容:

···
server {
    listen       443;
    server_name  192.168.241.134;

    ssl   on;
    ssl_certificate      /home/fwj/ca.crt;
    ssl_certificate_key  /home/fwj/ca.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
        root   html;
        index  index.html index.htm;
    }
}
···

使用下面命令查看配置是否有问题:

vi /usr/local/nginx/sbin/nginx -t

启动Nginx

/usr/local/nginx/sbin/nginx

测试

浏览器访问:https://192.168.241.134

FAQ

提示:nginx: [emerg] PEM_read_bio_X509_AUX("/home/fwj/192.168.241.134.pem") failed (SSL: error:0906D06C:PEM rout ines:PEM_read_bio:no start line:Expecting: TRUSTED CERTIFICATE)

说明证书配置有问题。

参考