Nginx配置Https自定义签名证书

前置条件

在配置https之前请确保下面的步骤已经完成

1、服务器已经安装nginx并且通过http可以正常访问。
2、不会安装nginx的可以参考下这篇文章:Linux下nginx安装步骤
3、拥有ssl证书,没有的可以去阿里购买或者免费申请一年,或者使用自签名证书。

如果以上条件都满足了,接下来开始配置https

第一步:Nginx的ssl模块安装

在配置ssl证书之前,要确保你的nginx已经安装了ssl模块,一般情况下自己安装的nginx都是不存在ssl模块的。

这里先检查下自己是否存在ssl模块:

进入到你的nginx安装目录下面,我的目录是在(/usr/local/nginx)

进入到目录的sbin目录下,输入

# 注意这里是大写的V,小写的只显示版本号
./nginx -V

如果出现 --with-http_ssl_module, 则已安装,下面的步骤可以跳过。

一般情况下都是不存在ssl模块的,接下来进入到你的解压缩后的nginx目录,注意这里不是nginx安装目录,是解压缩后的目录,我的是在(/usr/local/nginx-1.22.0),进入目录后,输入

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

接下来执行

#切记不要执行make install,否则会重新安装nginx
make

上述操作执行完成以后,目录下会出现objs文件夹,文件夹内存在nginx文件

接下来使用新的nginx文件替换掉之前安装目录sbin下的nginx,注意这里的替换的时候可以先将之前的文件备份下,停掉nginx服务

#停止nginx服务
./nginx -s stop

#替换之前的nginx
cp /usr/local/nginx-1.8.1/objs/nginx /usr/local/nginx/sbin/

成功之后,进入到nginx安装目录下,查看ssl时候成功

#注意这里是大写的V,小写的只显示版本号
./nginx -V
#可以看到这里出现了--with-http_ssl_module 证明已经安装成功

提示:这里替换后在执行 -V命令如果提示权限不足,先给这个nginx文件提升下权限,通过指令修改,如下:

chmod 111 nginx

第二步:生成ssl证书

openssl在centos中是标配,所以直接在centos中操作,因为要多个域名和IP,故而需要编辑一个配置文件

1.创建配置文件req.cnf

# 定义输入用户信息选项的"特征名称"字段名,该扩展字段定义了多项用户信息。
distinguished_name = req_distinguished_name

# 生成自签名证书时要使用的证书扩展项字段名,该扩展字段定义了要加入到证书中的一系列扩展项。
x509_extensions = v3_req

# 如果设为no,那么 req 指令将直接从配置文件中读取证书字段的信息,而不提示用户输入。
prompt = no

[req_distinguished_name]
#国家代码,一般都是CN(大写)
C = CN
#省份
ST = gd
#城市
L = gz
#企业/单位名称
O = echohye
#企业部门
OU = echohye
#证书的主域名
CN = 192.168.11.111

##### 要加入到证书请求中的一系列扩展项 #####
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[ alt_names ]
IP.1 = 192.168.11.111
# IP.2 = 192.168.11.222

在放置该文件的目录下执行以下命令

openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout server.key -out server.crt -config req.cnf -sha256

openssl 命令参数说明

req          大致有3个功能:生成证书请求文件、验证证书请求文件和创建根CA
-x509        说明生成自签名证书
-nodes       openssl req在自动创建私钥时,将总是加密该私钥文件,并提示输入加密的密码。可以使用"-nodes"选项禁止加密私钥文件。
-days        指定所颁发的证书有效期。
-newkey      实际上,"-x509"选项和"-new"或"-newkey"配合使用时,可以不指定证书请求文件,它在自签署过程中将在内存中自动创建证书请求文件
              "-newkey"选项和"-new"选项类似,只不过"-newkey"选项可以直接指定私钥的算法和长度,所以它主要用在openssl req自动创建私钥时。
rsa:2048     rsa表示创建rsa私钥,2048表示私钥的长度。
-keyout      指定私钥保存位置。
-out         新的证书请求文件位置。
-config      指定req的配置文件,指定后将忽略所有的其他配置文件。如果不指定则默认使用/etc/pki/tls/openssl.cnf中req段落的值

会生成server.crt和server.key两个文件

第三步:服务器端配置证书(nginx)

server {
        listen       8081 ssl;
        server_name  192.168.11.131;
        ssl_certificate /home/ssl/server.crt;
        ssl_certificate_key /home/ssl/server.key;
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 120m;
        ssl_prefer_server_ciphers on;
        ssl_session_tickets off;
        ssl_stapling_verify on;

        location /{
            root   html;
            index  index.html index.htm;
        }	

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

记住修改nginx后,需要重新加载

./nginx -s reload

现在访问http://192.168.11.131:8081/

而访问https://192.168.11.131:8081/

这是因为客户端未配置自定义签名的证书

第四步:服务器端配置证书(nginx)

1.将生成的servie.crt下载到客户端

2.双击servie.crt开始安装,操作如下

3.导入完成

其它——证书删除方式
certmgr.msc

第五步:访问https


如果还是出现警告,可以清除一下浏览器缓存并重启浏览器再访问。

这只是比较入门的配置,更多功能 请继续学习!

Nginx配置Https(详细、完整)
openssl创建的自签名证书,使用自签发证书--指定使用多域名、泛域名及直接使用IP地址...
nginx https配置、多域名共享SSL证书、禁止ip访问、http强转https

posted @ 2022-09-23 15:10  槑孒  阅读(4459)  评论(2编辑  收藏  举报