nginx配置https是需要CA颁发证书的,为了测试方便,我们可以使用自签名证书

一、 Nginx配置内网自签名https证书

1.如何生成自签名证书

1.1:我们需要为服务端和客户端准备私钥和公钥:

1
2
3
4
//生成服务器端私钥
openssl genrsa -out server.key 2048
//生成服务器端公钥
openssl rsa -in server.key -pubout -out server.pem

1.2:生成CA证书

1
2
3
4
// 生成 CA 私钥
openssl genrsa -out ca.key 2048

openssl req -new -key ca.key -out ca.csr

注意:执行上面命令会出现以下需要填写的项目,可以直接回车跳过,但是Common Name那一项建议填写你的域名,如果是本地的话,可以写localhost

1
2
3
4
5
6
7
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:这个是你的域名
Email Address []:

生成CA证书

1
openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt

1.3:生成服务器证书

1
2
3
4
//服务器端需要向 CA 机构申请签名证书,在申请签名证书之前依然是创建自己的 CSR 文件
openssl req -new -key server.key -out server.csr
//向自己的 CA 机构申请证书,签名过程需要 CA 的证书和私钥参与,最终颁发一个带有 CA 签名的证书
openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt

1.4:生成cer文件

1
2
//使用openssl 进行转换
openssl x509 -in server.crt -out server.cer -outform der

2.配置nginx 我们拿到CA签发的这个证书后,需要将证书配置在nginx中。 首先,我们将server.crt和server.key拷贝到nginx的配置文件所在的目录 其次,在nginx的配置中添加如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server {
listen 443 ssl;
server_name 你的域名;
charset utf-8;

ssl on;
ssl_certificate server.crt;
ssl_certificate_key server.key;

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

当前我们只是做一个欢迎页的https测试,所以location用的是默认的。需要扩展的小伙伴可以自行修改配置。 最后,重启nginx,访问https://你的域名,便可出现欢迎页。

注意:很多时候,访问一个网站的时候不会刻意去加https开头,而是直接输入域名访问,但是这样浏览器默认是http请求,如何让用户直接输入域名访问的也是https请求呢?

方法1:将所有http请求重定向到https

1
2
3
4
5
6
server { 
charset utf-8;
listen 80;
server_name 你的域名;
rewrite ^(.*) https://$host$1 permanent;
}

方法2:当网站只允许https访问的时候,通过http访问会报497状态码,利用error_page的方式重定向到https

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server {
listen 443 ssl;
listen 80;
server_name localhost;
charset utf-8;

ssl on;
ssl_certificate server.crt;
ssl_certificate_key server.key;

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

error_page 497 https://$host$uri?$args;
}

方法3:利用浏览器的方式 首先,建一个html文本,命名为https.html

1
2
3
<html>  
<meta http-equiv="refresh" content="0;url=https://你的域名/">
</html>

其次,再通过配置监听80端口的server对该html访问:

1
2
3
4
5
6
7
8
9
10
server { 
charset utf-8;
listen 80;
server_name 你的域名;
location / {
root html;
index https.html;
}
error_page 404 https://你的域名/;
}

二、 客户端内网使用HTTPS方法

1、window系统HTTPS内网访问

场景一:直接继续访问
点击“高级”,如果出现“继续访问”类似的链接,则可以点击直接访问。

场景二:通过SSL证书访问
证书由配置人员提供

步骤一:打卡浏览器设置

步骤二:打开安全设置

步骤三:打开安全浏览

步骤四:打开管理证书

步骤五:导入证书





步骤六:导入成功后,重启浏览器即可

注意:在360浏览器需要在“极速模式”下能够访问,需要切换到“极速模式”下按照此步骤重新操作一边即可。 建议使用chrome浏览器打开。

2、mac系统HTTPS内网访问

步骤一:直接点击ca.crt文件,输入系统的密码。
步骤二:设置证书权限。
找到钥匙串的设置

找到服务器对应ip的证书,双击打开


设置信任权限

步骤三:重启浏览器,重新打开网站即可。