Nginx配置https安全站点

幸运
185
文章
0
评论
三月 18, 202004:59:28 评论 101 3254字阅读10分50秒

Https是以安全为目标的http通道,简单讲是http的安全版。由于https是通过认证用户与服务器,相比http模式,https采用加密方式以防数据中途被盗取,大大降低了第三方窃取信息、篡改冒充身份的风险。

之前https被广泛用于万维网上安全敏感的通讯,例如交易支付方面,而现在越来越多的网站应用也开始加入https大家族中了,有了https,你的站点会被大多数主流浏览器标记为绿色的安全标识。最近又听说谷歌浏览器从今年7月份起将所有的http网站标记为不安全,所以赶快升级你的网站吧。

要在你的网站上启用https,需要从证书颁发机构(CA)获取证书(这种证书是以文件形式存在)。市面上大多的证书颁发机构都是颁发的证书需要收费,而且价格不菲,对个人和小型站点应用来说是一笔不小的开支。今天我给大家介绍几种获取免费CA证书的渠道以及如何在Nginx上配置https。

自签ssl证书实现https连接

自签ssl证书适用于站点没有域名的情况、用作测试,比如我们在公司局域网内架设一个站点应用,直接用ip+端口访问即可。自签证书不好的地方就是不受浏览器信任,在浏览器的地址栏一直会标红,并且初次访问站点时浏览器会发出警告提示,同意后才能正常访问

1.使用OpenSSL创建证书

建立服务器私钥(过程需要输入密码,请记住这个密码)生成RSA密钥

openssl genrsa -des3 -out server.key 1024

生成一个证书请求

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

需要依次输入国家,地区,组织,email。最重要的是有一个common name,可以写你的名字或者域名。生成的csr文件交给CA签名后形成服务端自己的证书。

#-------------------------------------------------------------------------------------------Enter pass phrase for server.key:                    #之前输入的密码Country Name (2 letter code) [XX]:                   #国家State or Province Name (full name) []:                 #区域或是省份Locality Name (eg, city) [Default City]:                #地区局部名字Organization Name (eg, company) [Default Company Ltd]:         #机构名称:填写公司名Organizational Unit Name (eg, section) []:               #组织单位名称:部门名称Common Name (eg, your name or your server's hostname) []:     #网站域名
Email Address []:                             #邮箱地址
A challenge password []:                         #输入一个密码,可直接回车
An optional company name []:                   #一个可选的公司名称,可直接回车
#------------------------------------------------------------------------------------------

输入完这些内容,就会在当前目录生成server.csr文件:

cp server.key server.key.orgopenssl rsa -in server.key.org -out server.key

使用上面的密钥和CSR对证书进行签名。

然后用以下命令生成证书:

openssl x509 -req  -days 365 -sha256   -in server.csr -signkey server.key -out server.crt

这样,证书生成完毕!然后把当前目录下生成的server.key和server.crt两个文件拷贝到Nginx的安装配置目录下:/usr/local/nginx/conf/ssl/,ssl目录自建。

2.Nginx下ssl配置

关于站点配置,不熟悉的同学可以先看下本站文章:《Nginx配置多域名多站点》。

要实现https访问,这样配置:

server {    listen 443 ssl default_server;    server_name _;    index index.html index.htm index.php;    ssl on;    ssl_certificate      ssl/server.crt;    ssl_certificate_key  ssl/server.key;
}

保存并重新启动Nginx后,直接再浏览器地址栏输入 https://你的ip/ 访问试下看。

使用Certbot免费https证书

Let’s Encrypt是一个免费的自动的CA认证机构,借助Certbot,可以自动傻瓜式安装和续期。如果你的Nginx是yum安装的,请看这里。如果是源码安装:《CentOS7使用源码编译安装Nginx》,需要做一些修改:

yum -y install yum-utils
yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optionalyum install certbot

安装好certbot后,执行:

certbot certonly

然后配置,/home/www/mysite是站点目录,-d后面跟域名,可以是多个。

certbot certonly --webroot -w /home/www/mysite -d mysite.com -d www.mysite.com

生成的证书位置:

ssl_certificate /etc/letsencrypt/live/cdw.me/fullchain.pem; #证书位置

ssl_certificate_key /etc/letsencrypt/live/cdw.me/privkey.pem; #私钥位置

然后修改站点配置文件重启nginx即可。

Let’s Encrypt证书是90天的有效期,到期可以续签,无限次数免费续签证书,可以使用crontab添加定时任务,比如每个月执行一次更新证书任务。

首先写一个脚本renew-cert.sh:

#!/bin/bash# 停止nginx/usr/local/nginx/sbin/nginx -s stop# 续签# --force-renew 强制更新/root/certbot-auto renew --force-renew# 启动nginx/usr/local/nginx/sbin/nginx

给予执行权限:

a+x renew-cert.sh

添加到crontab定时任务,每两个月 自动 更新 证书:

* * * */2 * /root/renew-cert.sh >> /root/crontab.log 2>&1

使用阿里云和腾讯云免费证书

如果你有阿里云或腾讯云账号,可以登录到控制台,找到ca证书栏目,然后申请一个免费的CA证书。免费证书一般使用期限是一年,一年到期后可以再次申请免费证书。

这些证书都需要验证是否是域名或站点拥有者。

免费证书申请成功后,直接下载证书,然后按照官方说明文档配置nginx即可,本文不再详述。

最后补充一点,可以配置http站点301跳转到https站点,如:

server {    
listen 80;    
server_name www.mysite.com;    
return 301 https://www.mysite.com$request_uri;
}

本文来源于:Nginx配置https安全站点-幸运草博客
特别声明:以上文章内容仅代表作者本人观点,不代表幸运草博客观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与幸运草联系。

  • 本站QQ群
  • weinxin
  • 捐赠本站
  • weinxin
Nginx手把手安装 Nginx

Nginx手把手安装

Netcraft 发布了2018年1月 Web 服务器调查报告,排名前三的依然是 Microsoft、Apache 和 nginx 。 Nginx为什么值得学习呢?可以看这篇文章 → Nginx的优点...
nginx实例 - 如何防止大图片占满带宽? Nginx

nginx实例 – 如何防止大图片占满带宽?

场景 前几天网站出现了访问缓慢的情况,查看系统资源状况后,发现出网带宽一直是占满的状态 查看服务器日志,发现了很多10M左右的超大图片的请求,这些图片占满了带宽,严重影响了其他的访问请求 正常情况下是...
Nginx网站服务 Nginx

Nginx网站服务

1、Nginx:(优点) (1)高性能、轻量级web服务软件 (2)稳定性高 (3)系统资源消耗低 (4)对http并发连接的处理能力强 2、apache和nginx的区别: Apache:是多进程w...
nginx配置二级域名 Nginx

nginx配置二级域名

主机域名配置那些事 server_name 匹配顺序 nginx中的server_name是用于指定基于名称的虚拟主机,匹配顺序是在配置文件中检索,从上到下,一匹配到符合的则终止,所以配置得按照精准在...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: