nginx配置自签证书

624 阅读3分钟

基本流程:

  • 自建CA机构(根证书)生成一个证书,签发各个环境的服务证书
  • 在Server中配置:声明开启HTTPS;声明监听443端口
  • 复制已签名的SSL证书和私钥到指定位置
  • 配置已签名的SSL证书(.crt)和私钥(.key)的位置
  • 浏览器中访问

一、mac安装openssl

1.git下载地址:GitHub - openssl/openssl: TLS/SSL and crypto library

2.在解压目录下执行

cd /Users/youzi/Downloads/openssl 
sudo ./config -–prefix=/Users/youzi/Downloads/openssl 
//这里需要输入本机密码

3.执行 make install

make install

4.查看版本 openssl version

openssl version

二、申请自签名的ssl证书

1.桌面创建ca文件夹,在该文件夹内打开终端

2.管理员权限(申请过程中有需要用到管理员权限)

sudo du

3.生成CA证书私钥(创建ca_private.key)

openssl genrsa -aes128 -passout pass:123456 -out ca_private.key 2048 
//创建时输入的密码:123456

4.生成CA证书请求文件(使用ca_private.key创建ca_req.csr)

有效期20年

1openssl req -new -key ca_private.key -passin pass:123456 -out ca_req.csr -days 7300
#国家代码,2位,中国CN 
#机构所在省份 
#机构所在城市 
#机构名称 
#机构部门 
#机构域名或服务域名 
#邮箱

5.生成CA根证书(ca_root.crt)

1openssl x509 -req -in ca_req.csr -signkey ca_private.key -out ca_root.crt -days 7300 -passin pass:123456

6.生成服务端的证书私钥(server_private.key)

1openssl genrsa -aes128 -passout pass:123456 -out server_private.key 2048

7.生成服务端的待签名证书(server_req.csr)

1openssl req -new -key server_private.key -passin pass:123456 -out server_req.csr -days 365 
//有效期1年 
//#注意服务器证书的common Name不能与上面颁发者CA的一样

8.使用CA根证书对服务端证书签名(server.crt)

1openssl x509 -req -in server_req.csr -days 365 \ 
-CAkey ca_private.key -CA ca_root.crt -CAcreateserial \ 
-out server.crt

三、声明监听443端口

server {
    listen 443;  #监听端口
    server_name test-h5-ekyc.ascent-ft.com;  #域名
    error_log /var/log/nginx/ekyc_h5_error.log error;  #错误日志
    access_log /var/log/nginx/ekyc_h5_access.log main;  #定义本虚拟主机的访问日志 
    location /{
            alias /data/ekyc/res/mobile/;
        try_files $uri $uri/ /index.html last;
    }
    #对'/ex'启动反向代理
      location /ex/ {
        proxy_pass http://127.0.0.1:12000;   #注意此处端口号不能与虚拟主机监听的端口号一样(也就是server监听的端口)
        proxy_redirect             off;
        proxy_set_header           Host $host;
        proxy_set_header           X-Real-IP $remote_addr;
        proxy_set_header           X-Forwarded-For $proxy_add_x_forwarded_for; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
        proxy_set_header           X-B3-Traceid $http_X_B3_Traceid;
        proxy_connect_timeout      300;   #后端服务器连接的超时时间_发起握手等候响应超时时间,nginx跟后端服务器连接超时时间(代理连接超时)
        proxy_send_timeout         300;   #后端服务器数据回传时间(代理发送超时)
        proxy_read_timeout         300;   #连接成功后,后端服务器响应时间(代理接收超时)
        proxy_buffer_size          4k;    #设置代理服务器(nginx)保存用户头信息的缓冲区大小
        proxy_buffers              4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置
    }

    location /app/ {
        proxy_pass http://127.0.0.1:12000;
        proxy_redirect             off;
        proxy_set_header           Host $host;
        proxy_set_header           X-Real-IP $remote_addr;
        proxy_set_header           X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header           X-B3-Traceid $http_X_B3_Traceid;
        proxy_connect_timeout      300;
        proxy_send_timeout         300;
        proxy_read_timeout         300;
        proxy_buffer_size          4k;
        proxy_buffers              4 32k;
    }
}

四、nginx配置https

1.ssh到服务器

ssh root@192.168.3.101 2//输入密码

2.复制已签名的SSL证书和私钥到指定位置

cd /etc 
cd ssl 
mkdir cert

本地终端打开

//上传文件夹到远程服务器 
scp -r /Users/youzi/Desktop/ca root@192.168.3.101:/etc/ssl/cert

3.配置已签名的SSL证书(.crt)和私钥(.key)的位置

打开ekyc项目的nginx配置文件

路径:/etc/nginx/sites-enabled/ekyc_h5.conf

ssl on; 2ssl_certificate /etc/ssl/cert/ca/server.crt 3ssl_certificate_key /etc/ssl/cert/ca/server_private.key

4.重启nginx

nginx -s reload 
//ssl生成证书后,放到配置文件中,重启每次卡在Enter PEM pass phrase:需要输入密码

原因是在设置私钥key时将密码设置写入了key文件,导致Nginx服务器在启动时要求Enter PEM pass phrase。我们需要做的是剥离这个密码,利用如下OpenSSL命令生成server.key.unsecure文件:

openssl rsa -in server_private.key -out server.key.unsecure

修改Nginx配置:

ssl_certificate_key /etc/ssl/cert/ca/server.key.unsecure;

再次重启nginx就不会有输入密码提示了