本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告
  • 首页
  • Nginx
  • 【Nginx配置教程】使用OpenSSL实现https

【Nginx配置教程】使用OpenSSL实现https

发布:TangLu2018-7-5 10:19分类: Nginx 标签: Nginx openssl ssl

在未使用SSL证书对服务器数据进行加密认证的情况下,用户的数据将会以明文的形式进行传输,这样一来使用抓包工具是可以获取到用户密码信息的,非常危险。而且也无法验证数据一致性和完整性,不能确保数据在传输过程中没被改变。所以网站如果有涉及用户账户等重要信息的情况下通常要配置使用SSL证书,实现https协议。

在生产环境中的SSL证书都需要通过第三方认证机构购买,分为专业版OV证书(浏览器地址栏上不显示企业名称)和高级版EV(可以显示企业名称)证书,证书所保护的域名数不同也会影响价格(比如只对www认证和通配*认证,价格是不一样的),且不支持三级域名。测试中可以自己作为证书颁发机构来制作证书,浏览器会显示为红色,代表证书过期或者无效,如果是黄色的话代表网站有部分连接使用的仍然是http协议。

不管使用哪种方法,在拿到证书后对Nginx的配置都是一样的,所以这里以搭建OpenSSL并制作证书来进行完整说明:

一、配置OpenSSL生成证书

1、由于是实验,所以要自己安装OpenSSL(官方地址https://www.openssl.org)生成证书,其版本号分为1.1和1.0两个大分支,Centos 7开始使用1.0.2k版本,如果配置的SSL需要达到苹果要求也需要1.0.2版本。1.1依赖的libssl也是1.1版本的,而系统默认的libsso库是1.0版本(ls /usr/lib64/libssl.so.10),所以还是尽量使用1.0版本,如果要用1.1的话可以自行编译安装

wget https://www.openssl.org/source/openssl-1.1.0h.tar.gz
tar zxf openssl-1.1.0h.tar.gz
./config  --prefix=/usr/local/openssl  #虽然安装包里还有一个configure脚本,但是正确安装方式是使用config脚本
make && make install
openssl version #查看版本


2、OpenSSL安装完成后我们主要用到的就是bin下的openssl命令,该命令用于生成证书文件

openssl1.png

3、执行命令生成证书的申请文件和私钥文件

openssl  req -nodes -newkey rsa:1024 -out myreq.pem -keyout privatekey.pem
#req:request的简写,代表发出一个申请数字证书的请求
#-nodes:不生成pin码,简化流程
#-newkey:生成新证书并指明加密算法和长度,也可以写成2048
#-out:输出一个请求文件,非密码文件
#-keyout:生成私钥


如果执行该命令提示“error while loading shared libraries: libssl.so.1.1”这种报错,是因为1.1版本的OpenSSL依赖了libssl.so.1.1的库,而系统里默认是没有这个库文件的。好在安装好OpenSSL后再lib目录中提供了该文件,做软连接就可以解决问题

ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1


4、运行命令后会要求填写相关信息,然后会在当前目录下生成申请文件和私钥文件openssl2.png


5、使用申请文件和私钥进行证书的申请,自己给自己颁发证书,命令运行后会在当前目录生成证书文件(申请文件以后没用了,可以删除掉了)

openssl req -in myreq.pem -x509 -key privatekey.pem -out mycert.pem -days 365 
-in:用之前的申请文件作为输入
-x509:证书格式
-key:私钥文件
-out:产出的证书文件
-days:证书有效期


二、配置Nginx https

要让Nginx支持SSL证书的话需要在编译Nginx的时候开启--with-http_ssl_module,然后在Nginx配置文件中做以下修改

#三个选项都配置在http或者server标签内
ssl on;
ssl_certificate file;
ssl_certificate_key file;


Nginx配置https示例

   # HTTPS server
    server {
        listen       443 ssl;
        server_name  test.com;
        ssl on;
        ssl_certificate      /usr/local/nginx/ssl/cert.pem;  #指定数字证书文件
        ssl_certificate_key  /usr/local/nginx/ssl/cert.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;
        }
    }
    server {
      listen 80;
      server_name test.com;
      rewrite (.*) https://$server_name$request_uri redirect;
    }


2、启动Nginx服务,查看443端口是否监听,然后在浏览器使用https://IP进行访问测试即可如果站点是动态页面(比如PHP),那么还需要在ssl所属的server标签内做PHP的配置才可以使用https协议

三、HTTPS服务优化方向

1、激活keepalive长连接,减少客户端请求次数

2、设置SSL session缓存,减少CPU资源消耗

配置示例:

server {
        listen       443 ssl;
        server_name  test.com;
        keepalive_timeout  100;  #开启keepalive
        ssl on;
        ssl_certificate      /usr/local/nginx/ssl/cert.pem;  #指定数字证书文件
        ssl_certificate_key  /usr/local/nginx/ssl/cert.key;  #指定数字证书私钥文件
        ssl_session_cache    shared:SSL:10m;  #缓存session会话
        ssl_session_timeout  10m;  #session 10分钟过期
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
        location / {
            root   html;
            index  index.html index.htm;
        }


温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《【Nginx配置教程】使用OpenSSL实现https
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-425.html  [生成短网址]

已有 0/5185 人参与

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~