最终的效果展示:

生成 ssl 证书 nginx 知乎 手动生成ssl证书_nginx

备注:紫色的表示比较重要的步骤或者需要注意的

一、SSL证书制作

1、SSL证书制作依靠openssl,首先检查OpenSSL:一般centos7上默认装好了

  1. [root@zq testzq]# openssl version
  2. OpenSSL 1.0.2k-fips  26 Jan 2017

2、生成私钥和自签名的SSL证书:

2.1、生成私钥,参数genrsa:生成RSA私钥;-des3:des3算法;-out server.pass.key:生成的私钥文件名;2048:私钥长度
[root@zq testzq]# openssl genrsa -des3 -out server.pass.key 2048                
 Generating RSA private key, 2048 bit long modulus
 .............................................................+++
 .......................+++
 e is 65537 (0x10001)
 Enter pass phrase for server.pass.key:
 Verifying - Enter pass phrase for server.pass.key:                #输入一个4位以上的密码[root@zqtestzq]# ll
 -rw-r--r-- 1 root root 1751 1月  20 11:01 server.pass.key   #有密码的私钥文件2.2、去除私钥中的密码
[root@zq testzq]# openssl rsa -in server.pass.key -out server.key
 Enter pass phrase for server.pass.key:
 writing RSA key[root@zq testzq]# ll
 -rw-r--r-- 1 root root 1679 1月  20 11:01 server.key            #无密码的私钥文件
 -rw-r--r-- 1 root root 1751 1月  20 11:01 server.pass.key    #有密码的私钥文件2.3、生成CSR(证书签名请求文件)
[root@zq testzq]# openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=Guangdong/L=Guangzhou/O=xdevops/OU=xdevops/CN=gitlab.xdevops.cn"
参数说明:# req 生成证书签名请求    
                   # -new 新生成             
                   # -key 私钥文件                 
                   # -out 生成的CSR文件               
                   # -subj 生成CSR证书的参数


生成 ssl 证书 nginx 知乎 手动生成ssl证书_SSL_02

备注:/CN=这个一定要换成你自己实际的ip或者域名,此处需要特别注意

2.4、生成自签名的SSL证书

[root@zq testzq]# openssl x509 -req -days 1825 -in server.csr -signkey server.key -out server.crt      #-days:证书有限期(天)
 Signature ok
 subject=/C=CN/ST=Guangdong/L=Guangzhou/O=xdevops/OU=xdevops/CN=gitlab.xdevops.cn
 Getting Private key[root@zq testzq]# ll
 -rw-r--r-- 1 root root 1241 1月  20 11:00 server.crt             #自签名的SSL证书
 -rw-r--r-- 1 root root 1021 1月  20 11:00 server.csr            #签名文件
 -rw-r--r-- 1 root root 1679 1月  20 11:01 server.key            #无密码的私钥文件
 -rw-r--r-- 1 root root 1751 1月  20 11:01 server.pass.key   #有密码的私钥文件

二、在服务端配置ssl.conf

upstream APP_SERVICE_PROXY {
                 server 171.29.138.289:8090 max_fails=1  fail_timeout=300s;
         }
  server {
•  
•         listen   8090     ssl;
•         server_name  localhost;
•         ssl_certificate      /home/cert/server.crt;       #配置已签名的SSL证书.crt
•         ssl_certificate_key  /home/cert/server.key;    #配置已签名的证书私钥.key
•     #    ssl_session_cache    shared:SSL:1m;
•         ssl_session_timeout  5m;
•     #    ssl_ciphers  HIGH:!aNULL:!MD5;
•     #    ssl_prefer_server_ciphers  on;
•         location / {

•             root   /home/app/wam;
•             index  index.html index.htm;
•         }
•      location ~ /process {

•                     proxy_pass http://APP_SERVICE_PROXY;
•                 
•                 }
•     }

  •  
  1.  
  2. 重启nginx服务:
  1. [root@zq testzq]# ./nginx
  2. Redirecting to /bin/systemctl restart nginx.service

三、验证证书是否配置成功

两种方法:

  1. 1、浏览器直接查看
  2. 2、服务端使用OpenSSL工具查看

3.1、浏览器直接查看

生成 ssl 证书 nginx 知乎 手动生成ssl证书_生成 ssl 证书 nginx 知乎_03

生成 ssl 证书 nginx 知乎 手动生成ssl证书_服务端_04

3.2、服务端使用OpenSSL工具,执行如下命令 openssl x509 -in diserver.crt -noout -dates即可看到证书的有效起止时间

  1. [root@zq]# openssl x509 -in diserver.crt -noout -dates
  2. notBefore=Jan 20 06:53:09 2020 GMT
  3. notAfter=Jan 18 06:53:09 2025 GMT

注:自签名的SSL证书存在安全隐患,在生产环境上需要购买和使用经权威机构认证和办法的证书

 

四、出现的问题解决:

4.1 Nginx开启SSL模块

  • 切换到源码包:
1. cd /usr/local/src/nginx-1.11.3



  • 查看nginx原有的模块
2. /usr/local/nginx/sbin/nginx -V



  • 在configure arguments:后面显示的原有的configure参数如下:
3. --prefix=/usr/local/nginx --with-http_stub_status_module
  • 1
  • 那么我们的新配置信息就应该这样写:
4. ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module



  • 运行上面的命令即可,等配置完,配置完成后,运行命令
5. make



  • 这里不要进行make install,否则就是覆盖安装,然后备份原有已安装好的nginx
6. cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak



  • 然后将刚刚编译好的nginx覆盖掉原有的nginx(这个时候nginx要停止状态)
7. cp ./objs/nginx /usr/local/nginx/sbin/

正确性检查

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

生成 ssl 证书 nginx 知乎 手动生成ssl证书_生成 ssl 证书 nginx 知乎_05

  • 然后启动nginx,仍可以通过命令查看是否已经加入成功
8. /usr/local/nginx/sbin/nginx -V