让服务器启用HTTPS-自己颁发证书-适用于非公网

一些概念

在动手操作前先明确一些概念与原理。首先是http与https,简单来说http使用的是明文传输,不安全,而https传输的信息是加密过的,比较安全。提到https,它又牵扯到SSL/TLS, 在此一并讲一讲,https的字母s代表安全(secure),安全这个功能由SSL/TLS协议来实现。SSL("Secure Sockets Layer)出现的时间比较早,由netspace公司搞出来的,有趣的是它从未发布过1.0版本,直接在1995年的时候随着netspace浏览器发布了2.0版本,当年netspace和微软的浏览器之争在《浪潮之巅》中描述的比较精彩。1999年TLS 1.0发布(其实就是SSL 3.1,SSL改名了!),再到后来2006年TLS1.1发布,2018年TLS1.3已经发布,而SSL作为一个古董已经退出了历史舞台。

https是如何工作的?

来看看https是如何工作就能知道为什么说它是安全的。参考博客[6]

实践

实践前须知

以下操作参考文章[3],将在CentOS7上执行,使用Nginx作为web服务器,使用自己颁发的证书,所以,由于它不是CA颁发的,浏览器无法验证服务器的身份,当我们访问服务器的时候浏览器会提示它不安全。之所以要自己给自己颁发证书是有原因的,例如没有域名,或者服务器在私网内,如果是在公网有域名最好用CA颁发的证书,其操作与本文有差异,需要另行参考。

安装Nginx并配置防火墙

安装Nginx:

yum install epel-release
yum install -y nginx
systemctl start nginx
systemctl status nginx
systemctl enable nginx

配置防火墙

#如果使用的是firewalld
firewall-cmd --add-service=http
firewall-cmd --add-service=https
firewall-cmd --runtime-to-permanent
#如果使用的是iptables
iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT

现在,在浏览器中输入服务器的ip就可以看到Nginx的默认页面了。

创建SSL证书

TLS/SSL采用非对称加密,服务器拿着私钥,客户端拿着公钥(公共证书)。

在服务器上/etc/ssl/certs目录用来存放公钥(公共证书),检查其是否存在,不存在则创建,再创建一个/etc/ssl/private目录用来存入私钥:

mkdir /etc/ssl/private
chmod 700 /etc/ssl/private

使用OpenSSL创建证书:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

执行命令后会提示输入一些信息,注意其中的Common Name,输入域名或者服务器IP,后面会用这个。

生成Diffie-Hellman(DH)组:

openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

生成的文件将会用于Nginx的配置。

配置Nginx

/etc/nginx/conf.d目录下创建一个ssl.conf文件并编辑它:

vi /etc/nginx/conf.d/ssl.conf

输入如下内容:

server {
    listen 443 http2 ssl;
    listen [::]:443 http2 ssl;

    server_name server_IP_address; # 修改为前面写的server_name

    ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
    ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    
    # 额外配置
    # ...
    
    # 自己的一些配置
    # ...
}

server_name即前面生成证书的时候填的,ssl_certificate_keyssl_certificate_keyssl_dhparam也是前面生成的文件,填写相应的路径。

到此最基本的配置就完成了,当然,这个配置文件里可能还有一些额外配置(例如加强安全、将http重定向到https)以及自己项目所需配置,可自行配置。接下来让Nginx生效:

# 检查配置文件是否有错
nginx -t
# 重启Nginx
systemctl restart nginx

这个时候在浏览器中输入https://IP就可以访问了,浏览器会提示网站不安全继续浏览就好了,需要注意的是http不会被禁止掉,输入http依然能够访问,需要不想让人使用http需要配置重定向,将http重定向到https。

Nginx额外配置(可选)

将http重定向到https

新建文件:

vi /etc/nginx/default.d/ssl-redirect.conf

输入如下内容:

return 301 https://$host$request_uri/;

然后重启Nginx即可。

参考:

[1] https://www.geeksforgeeks.org/whats-difference-http-https/

[2] https://howhttps.works/https-ssl-tls-differences/

[3] https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-nginx-on-centos-7

[4] https://en.wikipedia.org/wiki/X.509

[5] https://en.wikipedia.org/wiki/Diffie–Hellman_key_exchange

[6] https://blog.youkuaiyun.com/sean_cd/article/details/6966130

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值