部署支持 https 的 Nginx 服务

图片 2

通过 Certbot 为 nginx 开启https支持。

为什么需要 https ?

大势所趋, 为了 SEO , 为了安全, 为了装逼

http升级到https需要在nginx的配置中加入证书信息,查询资料后确定生成证书两种方案

环境

  • CentOS 7.1
  • python2.x(这玩意系统里本来就有)

准备工作

 

安装Nginx

sudo yum install nginx -y

顺手启动:

sudo systemctl start nginx

顺手设置开机启动:

sudo systemctl enable nginx

嗯,就完成了。 至于配置文件,会在后面设置。

域名 vps(服务器) * 1

这里以我的几块钱买的
lzres.win
为例(可能会乱入其他域名, 实际操作时换成自己的就行~ ).
域名是在阿里云的万网注册的, 这里的 DNS解析 什么的我就不赘述了, 相信知道
https 的起码不是白纸一样的小白了.

此处 DNS 解析还有一个坑, 之前在 Google搜索 开启 https 方法的时候,
看到某篇博文说 Let’s Encrypt 需要国外的 DNS
解析,为此我花了很多时间分别给几个域名换到国外的 DNS,
然后发现其实是不用切换的, 万网自带的 DNS 解析是可以开启 Let’s Encrypt 的
https 的.

第一种:自签名证书,然后开启 CloudFlare 的 CDN 服务

 

//确定是否安装openssl

which
openssl

//如果没有安装,通过apt-get或者yum等方式安装即可

sudo
apt-get install openssl

//生成一个名为“ssl.key”的
RSA key文件:执行结果:生成ssl.pass.key 和 ssl.key

openssl
genrsa -des3 -passout pass:x -out ssl.pass.key 2048

openssl rsa
-passin pass:x -in ssl.pass.key -out ssl.key

//删除中间文件

rm
ssl.pass.key

接着,利用已经生成的
ssl.key 文件,进一步生成 ssl.csr 文件:

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

执行此行命令会提示输入密码,按回车即可,因为前面我们在生成
ssl.key 时选择了密码留空。

最后我们利用前面生成的
ssl.key 和 ssl.csr 文件来生成 ssl.crt 文件,也就是自签名的 SSL
证书文件:

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

这一步之后,我们得到一个自签名的
SSL 证书文件 ssl.crt,有效期为 365 天。此时,ssl.csr
文件也已经不再被需要,可以删除掉了:

rm
ssl.csr

 

参考地址:

 

配置https

此处我们使用 Let’s Encrypt 提供的证书。且为了方便设置,使用 Certbot
配置工具。

VPS服务器

VPS 选择随便买一台就行, 什么腾讯云.阿里云.vultr .linode的之类的. 系统为
linux 的就行.(在 DNS 解析中解析到 vps 的 ip)

服务器的系统选择

亲测 CentOS6.5(32bit) 与 Let’s Encrypt
存在兼容性问题(在这耗费了我半天时间, 气死), 我的解决方案是将服务器换为
Debian 8.0 成功搞定.

第二种:借助于Let’s Encrypt

 

Let’s
Encrypt 简介

如果要启用HTTPS,我们就需要从证书授权机构(以下简称CA)
处获取一个证书,Let’s Encrypt 就是一个 CA。我们可以从 Let’s Encrypt
获得网站域名的免费的证书。

Certbot
简介

Certbot
是Let’s Encrypt官方推荐的获取证书的客户端,可以帮我们获取免费的Let’s
Encrypt 证书。

 

1.
下载 certbot

最好是根据官方网址来处理:

 

图片 1图片 2

2.
生成免费证书

官方文档有比较详细的说明,根据自己的情况来选择

 

注意:官方限制了每周的申请次数,如果你进行开发测试,生成证书的时候加上
–staging参数,这样就不必太担心数量的限制了

 

下面介绍几种方法

无论哪一种方法,实质都是验证你是不是拥有这个域名,只不过实现的途径不同

 

1>webroot方法,此方法会在你配置的服务器站点目录下创建
.well-known 文件夹,这个文件夹里面包含了一些验证文件,certbot 会通过访问

来验证你的域名是否绑定的这个服务器

 

如果你自己没有创建相应的站点也可以自己加入一个比较通用的配置

location ^~
/.well-known/acme-challenge/ { default_type “text/plain”; root
/usr/share/nginx/html; } location = /.well-known/acme-challenge/ {
return 404; }

 

certbot
certonly –webroot -w 网站根目录 -d example.com -w 网站根目录 -d
www.example.com

 

2>standalone方法,如果你不想使用你自己的服务器,这个方法是个选择,但是需要注意要关闭相应的端口或者是80或者443(以你自己选择的方式决定)

使用80端口:
certbot certonly –standalone –preferred-challenges http -d
example.com

使用443端口:
certbot certonly –standalone –preferred-challenges tls-sni -d
example.com

 

3>manual方法,如果你想在任意的linux主机下生成证书,那么这种方法可能是一个选择,但是要注意的是验证过程中会生成一个字符串,需要你将这个随机的字符串添加到你dns服务器才可以完成验证操作.

certbot
certonly –manual –preferred-challenges dns -d archerwong.cn

 

3.删除证书,如果你生成的时候添加了
–stagin参数,下面的命令也要添加

certbot
revoke –cert-path /etc/letsencrypt/live/example.com/cert.pem

certbot
delete –cert-name example.com

 

4.证书更新

sudo
certbot renew –dry-run

 

5.丰富的参数选择

以上的各种命令其实都是可以加入很多参数,最好是查找下官方文档

 

当然官方提供了很多种生成证书的方法,你可以根据你自己的实际情况进行选择

 

证书生成完毕后,我们可以在
/etc/letsencrypt/live/
目录下看到对应域名的文件夹,里面存放了指向证书的一些快捷方式。

 

生成证书后,配置
Nginx

 

打开 nginx
server 配置文件加入如下设置:

server
{

  listen
443 ssl on;

  ssl_certificate
/etc/letsencrypt/live/网站域名/fullchain.pem;

  ssl_certificate_key
/etc/letsencrypt/live/网站域名/privkey.pem;

  ##
其他配置

}

 

强制跳转
https

https
默认是监听 443 端口的,没开启 https 访问的话一般默认是 80
端口。如果你确定网站 80 端口上的站点都支持 https
的话加入下面的配件可以自动重定向到 https

server
{

  listen
80;

  server_name
your.domain.com;

  return
301 ;

}

 

参考地址:

 

 

 

 

 

 

 

 

 

工具获得

证书机构: Let’s Encrypt –
https://letsencrypt.org
配置工具: Certbot – https://certbot.eff.org/

事实上,你根本用不到上面两个链接,我把它们写在这只是为了方便了解其他细节,顺便表示尊重。

实际上我们可以直接通过包管理器获取 Certbot 工具。

首先需要安装 EPEL 源:

sudo yum install epel-release -y

然后安装 Certbot :

sudo yum install python2-certbot-nginx -y

工具安装完成。

开始安装 LNMP1.4

在 lmnp.org
查看详细教程, 注意一定要安装 lnmp1.4 版本(及以上), 目前(2017.3.31) 1.4
版本仍为测试版

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图