zoukankan      html  css  js  c++  java
  • nginx配置ssl证书流程及常见问题

    背景:

    项目开发中用到了微信小程序,但是服务器配置URL必须是HTTPS,所以需要通过配置nginx的SSL模块来支持HTTPS访问,也就是说,要做一个网站域名为 dmsdbj.com 要求通过HTTPS://dmsdbj.com进行访问.

    SSL英文名为Secure Socket Layer,安全套接字层。SSL是一种数字证书,它使用ssl协议在浏览器和web server之间建立一条安全通道,数据信息在client与server之间的安全传输.

    前提:

    1. 配置SSL模块首先需要CA证书,CA证书可以自己手动颁发也可以在阿里云申请,本人在阿里云上申请的证书。

    2. 默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译nginx时指定–with-http_ssl_module参数.

    阿里云购买CA证书

    操作步骤:

    一、下载CA证书
          1. 登录阿里云,选择“控制台”-“产品与服务”,在“安全(云盾)”一栏中选择“CA证书服务(数据安全)”。

    2.在已经购买好的证书点击“下载”,在新打开的页面上选择“Nginx/Tengine”,点击“下载证书for Nginx”。

    二、在Nginx配置文件中安装证书

    文件说明:

    1. 证书文件“证书名称.pem‘’,包含两段内容,请不要删除任何一段内容。

    2. 如果是证书系统创建的CSR,还包含:证书私钥文件“证书名称.key”。

    ( 1 ) 在Nginx的配置文件所在的目录下创建cert文件夹,并且将下载的全部文件拷贝到cert目录中。如果申请证书时是自己创建的CSR文件,请将对应的私钥文件放到cert目录下并且命名为“证书名称.key”;

    ( 2 ) 打开 Nginx 安装目录下 conf 目录中的 nginx.conf 文件,找到:

    HTTPS server
    server {
    listen 443;
    server_name localhost;
    ssl on;
    ssl_certificate cert.pem;
    ssl_certificate_key cert.key;
    ssl_session_timeout 5m;
    ssl_protocols SSLv2 SSLv3 TLSv1;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers on;
    location / {
    
    }
    }
    

    ( 3 ) 将其修改为 (以下属性中ssl开头的属性与证书配置有直接关系,其它属性请结合自己的实际情况复制或调整) :

    server {
        listen 443;
        server_name localhost;
        ssl on;
        root html;
        index index.html index.htm;
        ssl_certificate   cert/证书名称.pem;
        ssl_certificate_key  cert/证书名称.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 / {
            root html;
            index index.html index.htm;
        }
    }
    

    保存退出。

    ( 4 )重启 Nginx。

    nginx -s reload 
    

    ( 5 ) 通过 https 方式访问您的站点,测试站点证书的安装配置。 在浏览器中输入你的网址,如下图所示,则说明配置成功。

    安装过程中遇见的问题

    错误一:

    nginx: [emerg] unknown directive "ssl" in /usr/local/nginx/conf/nginx.conf:151
    

    解决方案:

    出现这种错误可能是两种情况造成的:

    情况一:配置文件格式不正确。

    解决方法参考链接:http://blog.csdn.net/yuanyuan_186/article/details/51324082

    情况二:ssl模块并未被安装

    默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译nginx时指定–with-http_ssl_module参数,这种情况也会导致错误二的出现。

    解决方案:

    nginx缺少http_ssl_module模块,编译安装的时候带上--with-http_ssl_module配置就行了,但是现在的情况是我的nginx已经安装过了,怎么添加模块,其实也很简单,往下看: 做个说明:我的nginx的安装目录是/usr/local/nginx这个目录,我的源码包在/usr/local/src/nginx-1.3.6目录

    (1)切换到源码包:

    cd /root/nginx-1.13.6
    

    (2)配置信息:

    ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
    

    (3)配置完成后,运行make进行编译,千万不要进行make install,否则就是覆盖安装。

    make
    

    (4)然后备份原有已经安装好的nginx

    cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
    

    (5)停止Nginx,正常命令直接 nginx -s stop就可以

    nginx -s stop
    

    如果关不掉,就直接Kill掉进程。ps aux | grep 进程名 查看进程占用的PID号。

    ps aux|grep nginx
    

    杀掉查出来的PID,或者直接
    pkill -9 nginx

    (6)将刚刚编译好的nginx覆盖掉原有的nginx

    cp ./objs/nginx /usr/local/nginx/sbin/
    

    (7)启动nginx

    nginx
    

    (8)通过下面的命令查看是否已经加入成功。

    nginx -V
    

    错误二:

    nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:148
    

    解决方案:

    出现这种情况的解决方案参考错误一的第二种情况的解决方案即可。

    错误三:

    Stoping nginx... nginx: [emerg] BIO_new_file("/usr/local/nginx/conf/cert/214291778530222.pem") failed (SSL: error:02001002:system library:fopen:No such file or             directory:fopen('/usr/local/nginx/conf/cert/214291778530222.pem','r') error:2006D080:BIO routines:BIO_new_file:no such file) failed. Use force-quit
    

    解决方案:

    这可能是证书路径存放的位置不正确导致的。

    将证书文件放到nginx.conf所在的目录下即可,如果不行,将nginx配置文件中的证书位置换成绝对路径。

  • 相关阅读:
    Category
    [转]IOS, xib和storyboard的混用
    关于delegate, category和subclass
    iOS 在viewController中监听Home键触发以及重新进入界面的方法
    ios获取当前语言
    Xcode Product -> Archive disabled
    安卓虚拟机启动后报错: 类似 SDK Manager] Error: Error parsing .....devices.xml 解决方案
    Objective-C中一个方法如何传递多个参数的理解
    oc的内存管理
    ios中Raw文件系统常用文件夹
  • 原文地址:https://www.cnblogs.com/vinic-xxm/p/11649026.html
Copyright © 2011-2022 走看看