大家好,欢迎来到IT知识分享网。
在部分场景中,我们必须使用 https 请求,因为 https 请求更为安全,常用于支付方面的请求调用
https 的基础是 ssl,我们一般是没有 ssl 证书的,我们需要向供应商购买 ssl 证书,今天我们使用 Let’s Encrypt 获取免费证书,搭建我们的 https 请求
1、安装 Nginx
在 Centos 中搭建 nginx 环境,可以参考我的这篇文章,Centos7中搭建Nginx环境
https://lizhou.blog.csdn.net/article/details/116043485
2、安装 ssl 模块
我们默认安装的 nginx 是没有 ssl 模块的,可以输入命令验证,进入 nginx 的目录
cd /usr/local/nginx/sbin/
执行命令
./nginx -V
注意是大写的 V,小写的 v 只会出现 nginx 的版本信息
如图所示,我是已经安装了 ssl 模块的,没有安装的可以参考如下:
- 1> 进入到你解压 nginx 的目录,也就是带用 nginx 版本信息的那个目录
cd /usr/local/nginx-1.8.0/
- 2> 执行命令
./configure --prefix=/usr/local/nginx --with-http_ssl_module
配置了 ssl 模块,使用 make 命令重新编译
make
注意,不能使用 make install 命令,这样会导致重新安装 nginx,此时当前目录就会出现 objs 目录
进入 objs 目录,会看到 nginx 的可执行文件
- 3> 替换 nginx 可执行文件
我们使用这个新的 nginx 可执行文件 替换 sbin 目录下的 nginx 可执行文件
cp ./nginx /usr/local/nginx/sbin/
系统会询问你是否覆盖,输入 y 即可,如果覆盖失败,多半是因为你的 nginx 还在启动中,先将 nginx 关闭即可
- 4> 再次检验是否安装 ssl 模块
进入 nginx 目录
cd /usr/local/nginx/sbin/
执行命令
./nginx -V
此时就能看到 ssl 模块已经安装成功了
3、获取 ssl 证书
- 1、Let’s Encrypt 简介
如果要启用 HTTPS,我们需要一个 CA 证书,Let’s Encrypt 是一个免费的证书颁发机构,由 ISRG(Internet Security Research Group)运作。
- 2、使用 Certbot 获取证书
Certbot 是 Let’s Encrypt 官方推荐的证书获取工具,它可以帮助用户很方便的获取和更新 Let’s Encrypt 证书,Certbot 支持所有 Unix 内核的操作系统。
- 3、安装 Certbot 客户端
执行命令
yum install -y epel-release
yum install -y certbot
- 4、获取证书
因为使用 Certbot 获取证书时,Let’s Encrypt 服务器会访问 http://sub.domain.com/.well-known 来验证你的域名服务器,因此你需要修改 nginx 配置文件,配置 .well-known 指向本地一个目录
location /.well-known {
alias /usr/local/nginx/html/.well-known;
}
- 5、使用 certbot 命令获取 ssl 证书,执行命令
certbot certonly --webroot -w /usr/local/nginx/html/ -d xxx.com -m xxxxxx@xxx.com --agree-tos
-w,指定 webroot 目录
-d,指定想要获取证书的域名,支持多个域名
-m,输入你的邮箱地址
如果获取成功,你的密钥和证书存放在 /etc/letsencrypt/live/xxx.com/ 目录下
错误解决:
- 1、ImportError: cannot import name UnrewindableBodyError
解决办法,重装 urllib3 库,执行命令
pip uninstall urllib3
卸载 urllib3 库
pip install urllib3
安装 urllib3 库
- 2、pkg_resources.DistributionNotFound: The ‘urllib3<1.23,>=1.21.1’ distribution was not found and is required by requests
执行命令
easy_install urllib3==1.21.1
- 3、ImportError: ‘pyOpenSSL’ module missing required functionality. Try upgradin
执行命令
pip install --upgrade --force-reinstall 'requests==2.6.0'
以上就是我遇到的三个问题,期间会有询问的地方,输入 y 即可
以上错误解决完后,再次输入命令获取 ssl 证书
certbot certonly --webroot -w /usr/local/nginx/html/ -d xxx.com -m xxxxxx@xxx.com --agree-tos
没错误,就能够在 /etc/letsencrypt/live/xxx.com/ 目录下看到你的 ssl 证书了
注意: 该证书 90 天有效,到期需要重新申请,你也可以通过定时任务来定时更新 ssl 证书
4、配置 nginx HTTPS server
编辑 nginx 的配置文件
cd /usr/local/nginx/conf/
编辑 nginx.conf 文件
vim nginx.conf
在 server {} 后面加入以下内容
# HTTPS server
server {
# 监听端口,默认443
listen 443 ssl;
# 你的域名
server_name xxx.com;
# 你证书的位置
ssl_certificate /etc/letsencrypt/live/xxx.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/xxx.com/privkey.pem;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
# 默认首页
location / {
root html;
index index.html index.htm;
}
}
5、访问测试
重启 nginx,进入 sbin 目录
cd /usr/local/nginx/sbin
输入命令
./nginx -s reload
浏览器访问
https://xxx.com
表示,我们的 ssl 证书生效,https 配置成功
如您在阅读中发现不足,欢迎留言!!!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/21576.html