nginx+https证书配置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lzxlfly/article/details/84075620

现今稍微好一点的网站数据传输一般都采用基于SSL的安全数据传输,即HTTPS协议,既然安全,那HTTPS数据传输就要用到加密证书,Web站点配置HTTPS访问,可以在web服务器配置,但是Nginx更是一种不错的选择,尤其是代理多个web服务器时候,可以减少每个服务器配置证书的麻烦。

 一、检查SSL配置

1、检查http_ssl配置

如果我们已经装了nginx, 那么我们要检查一下是nginx是否安装了http_ssl模块

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

 看到--with-http_ssl_module就表示已经安装了ssl模块,可以直接去配置了

nginx version: nginx/1.14.0
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) 
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

如下,http_ssl模块便没有安装

nginx version: nginx/1.14.0
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) 
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled

http_ssl模块依赖openssl,检查openssl是否安装,有了跳过,没有看下一步安装

[root@localhost unicorn]# openssl version -a
OpenSSL 1.0.2k-fips  26 Jan 2017
built on: reproducible build, date unspecified
platform: linux-x86_64
options:  bn(64,64) md2(int) rc4(16x,int) des(idx,cisc,16,int) idea(int) blowfish(idx) 
compiler: gcc -I. -I.. -I../include  -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -m64 -DL_ENDIAN -Wall -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches   -m64 -mtune=generic -Wa,--noexecstack -DPURIFY -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DRC4_ASM -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM
OPENSSLDIR: "/etc/pki/tls"
engines:  dynamic 

2、安装openssl依赖

yum安装: yum -y install openssl-devel  openssl 

或者源码安装:

下载 https://www.openssl.org/source/openssl-1.1.1.tar.gz
解压 tar -zxvf openssl-1.1.1.tar.gz,进入解压目录openssl-1.1.1
配置  ./config
编译  make
安装  make install

3、安装http_ssl模块

进入到之前nginx-1.14.0的解压目录下

(1)configure构建

构建时,加入新参数时,一定要把--prefix后原有的参数都带上,以免影响我们的业务,--prefix后没有参数就不用带了

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

(2)make编译

make编译,无须make install,因为我们已经安装过nginx了,make只是编译下configure的新内容

make

(3)重新查看配置

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

 看到如下,便表示成功了

nginx version: nginx/1.14.0
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) 
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

(4)替换nginx二进制文件

 #替换前最好先备份一下原来的文件,出错可以回退到之前
 cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
 #把重新编译好的objs/nginx文件 复制到/usr/local/nginx/sbin/ 下,替换原来的nginx文件
 cp objs/nginx  /usr/local/nginx/sbin/nginx

二、配置证书

1、证书路径

mkdir -p /usr/local/nginx/cert  #在nginx下创建cert目录

#将后缀名pem和key的证书放在/usr/local/nginx/cert/路径下
/usr/local/nginx/cert/214688691030891.pem;
/usr/local/nginx/cert/214688691030891.key;

2、证书配置

在http{}中加入server配置

server {
        listen 80;      #监听80,支持http访问
        listen 443 ssl; #监听443,支持https访问
        access_log  logs/xxx/https_access.log;#日志路径

        server_name    www.xxx.cn;  #ip所指向的域名
        ssl_certificate   /usr/local/nginx/cert/214688691030891.pem; #证书路径
        ssl_certificate_key  /usr/local/nginx/cert/214688691030891.key;#证书key路径
        ssl_session_timeout 5m; #缓存中session参数客户端可以重复使用,默认5分钟过期,可省略
        ssl_ciphers ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;#默认是此,可省略
        ssl_protocols SSLv2 SSLv3 TLSv1;#默认就此协议,可省略
        ##开启服务器加密优先,要求协议SSLV3和TLSV1支持,默认off,也可以省略
        ssl_prefer_server_ciphers on;
        location / {
                proxy_pass      http://101.80.51.50:8080; #内网web访问地址
                proxy_set_header       Host $host; #host,相当于机器名字
                proxy_set_header X-Real-IP $remote_addr; #获取客户端真实ip
                # 转发客户端真实ip,特别是多nginx代理
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_redirect http:// $scheme://;  #http协议重定向到https协议
                if ( $server_port = 80 ){  #如果是http访问,重定向到https访问路径
                        rewrite ^(.*) https://$server_name$1 permanent;
                }
        }
   }

3、重新加载配置

检查语法是否有误:/usr/local/nginx/sbin/nginx -t,无误如下

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

重新加载配置:/usr/local/nginx/sbin/nginx -s reload

猜你喜欢

转载自blog.csdn.net/lzxlfly/article/details/84075620