sunsili 发表于 2024-3-5 15:01:58

https配置步骤

https配置步骤本文将以本站 http://liluyang.me 升级到 https://liluyang.me 的过程来分享一下 https 的原理,http 和 https 的区别,以及如何将网站从 http 升级到 https。引言为什么要用 https?https 更安全。甚至为了安全,一个专业可靠的网站, https 是必须的。 Firefox 和 Chrome 都计划将没有配置 SSL 加密的 https 网站标记为不安全(貌似 Firefox50 已经这么干了),目前它们也正在联合其他相关的基金会与公司推动整个互联网 https 化,现在大家访问的一些主要的网站。如 Google 多年前就已经全部启用 https ,国内的淘宝、搜狗、知乎、百度等等也全面 https 了。甚至 Google 的搜索结果也正在给予 https 的网站更高的排名和优先收录权。要需要掌握哪些知识?拥有基础的 Linux 系统知识,常用的 Shell 命令。需要有什么资源?如果你只是要测试 https,请查看Nginx 容器教程如果你要在生产环境使用 https,请接着往下看:一个服务器,一个域名,并且已经正确的将域名指向了你的服务器,并且拥有服务器的 SSH 权限Tips: 需要注意的是如果是在国内阿里云或者腾讯云购买的域名请备案,否则即使你正确的配置了你的域名,可能也依然无法访问你的服务器,因为在国内备案是必须的。关键词http 和 https简单来说,http 是一个传输网页内容的协议,比如你看到的 http 开头的网站 http://www.163.com,其网页上的文字、图片、 CSS、JS 等文件都是通过 http 协议传输到我们的浏览器,然后被我们看到。

而 https 可以理解为 HTTP over SSL/TLS ,好端端的 http 为什么需要 over SSL/TLS 呢,因为 http 是明文传输的,通过 http 协议传输的内容很容易被偷看和篡改,为了安全(你肯定不想被人偷看或者篡改网页内容吧,比如网站银行密码什么的。)就为 http 协议再加上了一层 SSL/TLS 安全协议,所以就有了 https。SSL/TLSHTTP over SSL/TLS 字面意思就是带 安全套接层 的 http 协议,内心纯洁的同学也可以理解为 带安全套的 http,因为带了安全套,所以当然会比较安全(/(ㄒoㄒ)/~~)。其中 SSL 是 Secure Sockets Layer 的缩写,是 “安全套接层” 的意思。TLS 是 Transport Layer Security 的缩写,是 传输层安全协议 的意思。SSL 和 TLS 是同一个东西的不同阶段,理解为同一个东西也行,都是安全协议就对了。

CA证书颁发机构(CA, Certificate Authority)即颁发数字证书的机构。是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。Let’s EncryptLet's Encrypt 成立于 2015 年的数字证书认证机构,成立的目的就是为了推行 https 协议在全世界的普及。主要赞助商包括电子前哨基金会、Mozilla基金会、Akamai以及思科。Let's Encrypt 旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的 SSL/TLS 证书。说人话就是 Let’s Encrypt 就是一个可以给我们颁发授信证书的 CA 组织。CertbotLet’s Encrypt 官方推出的授信证书生成客户端。可以在 Debian,CentOS 等主流系统上运行官方链接如下:https://certbot.eff.org/获取证书要升级到 https 首先要获得 CA 签发的安全证书文件,我们选择的证书签发机构是 Let’s Encrypt,目前 Let’s Encrypt 推荐的方法是安装 Certbot 工具通过校验服务器和域名的归属权方式来获取证书安装Certbot如果你的英文能力比较好,那么请访问 Certbot官网 根据官方教程来下载,官方教程更加细致,出了问题也方便查看官方的第一手资料。当然你也可以根据以下命令来安装 Certbot 工具,这里我们以 debian9 系统为例来安装# 下载 certbot,如果是 centOS 等内核,可以使用 yum 命令
apt install certbot
生成证书certbot 安装成功后,我们有两种模式来获取证书第一种模式 Webrootcertbot certonly --webroot -w /root/docker_nginx/html -d liluyang.me -d www.liluyang.me
这个命令会为 liluyang.com 和 www.liluyang.com 这两个域名生成一个证书--webroot 模式会在 /root/docker_nginx/html 中创建 .well-known文件夹,这个文件夹里面包含了一些验证文件,certbot 会通过访问 example.com/.well-known/acme-challenge 来验证你的域名是否绑定的这个服务器。这个文件夹就是你 Nginx 下 index.html 所在的目录,请自行根据自己服务器 Nginx 的配置情况修改这个参数。如果执行成功,命令行会大致输出以下参数表示成功:IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/liluyang.me/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/liluyang.me/privkey.pem
   Your cert will expire on 2019-07-01. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
- If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                  https://eff.org/donate-le
以上信息中包含了生成后的证书的位置,过期时间等信息,根据提示信息我们打开 /etc/letsencrypt/live/ 文件夹,检查这个文件夹中是否有你生成的对应网站的证书文件,如果成功,应该如下图所示:

这个命令在大多数情况下都可以满足需求,如果失败了,请看下一种模式。第二种模式Standalone如果你已经通过第一种模式生成证书成功,请跳过这里,直接看下一章但是有些时候我们的一些服务并没有根目录,例如一些微服务,这时候使用 --webroot 就走不通了。certbot 还有另外一种模式 --standalone, 这种模式不需要指定网站根目录,他会自动启用服务器的 443 端口,来验证域名的归属。我们有其他服务(例如nginx)占用了 443 端口,就必须先停止这些服务,在证书生成完毕后,再启用。certbot certonly --standalone -d example.com -d www.example.com
证书生成完毕后,我们可以在 /etc/letsencrypt/live/ 目录下看到对应域名的文件夹,里面存放了指向证书的一些快捷方式。这时候我们的第一生成证书已经完成了,接下来就是配置我们的 web 服务器,启用 HTTPS。如果生成失败,并且你自己搜索之后又没有能力解决,请在评论留言如果生成失败,并且你自己搜索之后又没有能力解决,请在评论留言如果生成失败,并且你自己搜索之后又没有能力解决,请在评论留言安装证书证书生成生成后,我们还要做最后的一步就是把证书的配置信息添加到 nginx 的 conf 目录的 certs 文件夹中。我个人的 Nginx 是通过 docker 镜像的方式运行的,并且我将本地的 /root/docker_nginx/conf 文件夹设置为了 Nginx 的配置文件夹,所以现在我们将证书 cert.pem 和 privkey.pem 拷贝到这个目录。配置目录如下

在 Nginx 的配置文件 nginx.conf 末尾添加以下配置,注意修改对应的配置参数,下面的配置模板仅供参考。如果存在 conf.d/default.conf 文件请优先修改此文件,具体原因请百度# 443 https 配置server {    listen 443 ssl http2;    server_nameliluyang.me www.liluyang.me;    ssl                      on;    ssl_certificate          /etc/nginx/certs/cert.pem;    ssl_certificate_key      /etc/nginx/certs/privkey.pem;    ssl_session_timeout5m;    ssl_ciphers HIGH:!aNULL:!MD5;    ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;    ssl_prefer_server_ciphers   on;    location / {      root   /usr/share/nginx/html;      indexindex.html index.htm;    }}
重启 Nginx到此为止,我们就已经成功的完成了 https 的配置。 现在打开我的博客 https://liluyang.com 就可以在浏览器端看到标有 安全 的网站标识字样了,如下图:



注意事项如果是 docker 部署的 nginx,最后重启启动 docker 时要将 443(https) 端口映射出来,否则无法访问服务器的 443(https) 端口的。docker run \--volume "$PWD/html":/usr/share/nginx/html \--volume "$PWD/conf":/etc/nginx \-p 80:80 \-p 443:443 \-d \nginx
可选配置强制使用 https 访问网站将 http 请求转发到 https请在配置文件夹中添加以下配置,然后重启 Nginx 即可server {    listen 80;    server_name liluyang.me www.liluyang.me;    return 301 https://liluyang.me;}
自动续订细心的同学可能会发现, https 证书的有效时间是非常短的,只有三个月,那么每隔三个月我们都要操作一次吗?其实不是的,我们可以用过自动续订的方式来刷新我们的证书有效时间。测试自动续订certbot renew --dry-run
如果测试成功,会生成如下提示:Saving debug log to /var/log/letsencrypt/letsencrypt.log- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Processing /etc/letsencrypt/renewal/liluyang.me.conf- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Cert not due for renewal, but simulating renewal for dry runPlugins selected: Authenticator webroot, Installer NoneRenewing an existing certificatePerforming the following challenges:http-01 challenge for liluyang.mehttp-01 challenge for www.liluyang.meWaiting for verification...Cleaning up challenges- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -new certificate deployed without reload, fullchain is/etc/letsencrypt/live/liluyang.me/fullchain.pem- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -** DRY RUN: simulating 'certbot renew' close to cert expiry**          (The test certificates below have not been saved.)Congratulations, all renewals succeeded. The following certs have been renewed:/etc/letsencrypt/live/liluyang.me/fullchain.pem (success)** DRY RUN: simulating 'certbot renew' close to cert expiry**          (The test certificates above have not been saved.)- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -IMPORTANT NOTES: - Your account credentials have been saved in your Certbot   configuration directory at /etc/letsencrypt. You should make a   secure backup of this folder now. This configuration directory will   also contain certificates and private keys obtained by Certbot so   making regular backups of this folder is ideal.
手动执行自动续订certbot renew -v
开启自动续订自动续订也可以用 certbot 来实现,自动续订之后会更新 pem 文件到 /etc/letsencrypt/live/example.com/ 。如果你的 nginx 配置没有直接指向 /etc/letsencrypt/live/example.com/ 文件夹,请记得将 pem 文件夹拷贝到你的配置文件夹中certbot renew --quiet --no-self-upgrade
参考链接
[*]《Nginx 容器教程》 BY 阮一峰
[*]《https 教程参考链接》 BY 阮一峰
[*]《Let's Encrypt 证书生成工具Certbot》 BY Let's Encrypt官方
[*]《Let's Encrypt 入门教程》
[*]《数字证书及 CA 的扫盲介绍和工作原理》
[*]《HTTPS 简介及使用官方工具 Certbot 配置 Let’s Encrypt SSL 安全证书详细教程》

页: [1]
查看完整版本: https配置步骤