摘要:如果存在文件请优先修改此文件,具体原因请百度配置重启到此为止,我们就已经成功的完成了的配置。
本文首发地址:https://liluyang.me
本文将以本站 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_name liluyang.me www.liluyang.me; ssl on; ssl_certificate /etc/nginx/certs/cert.pem; ssl_certificate_key /etc/nginx/certs/privkey.pem; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { root /usr/share/nginx/html; index index.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 run Plugins selected: Authenticator webroot, Installer None Renewing an existing certificate Performing the following challenges: http-01 challenge for liluyang.me http-01 challenge for www.liluyang.me Waiting 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 入门教程》
《Let"s Encrypt 使用教程,免费的SSL证书,让你的网站拥抱 HTTPS》
《HTTPS 简介及使用官方工具 Certbot 配置 Let’s Encrypt SSL 安全证书详细教程》
《数字证书及 CA 的扫盲介绍和工作原理》
~
广告:扫码关注 知乎日报 小程序客户端
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/11490.html
摘要:服务器部署最后一篇文章,部署证书,升级为,其实网上相关教程有很多,但是略麻烦,本教程让你一切从简,分钟搞定,免费一年哦申请证书免费申请的机构有很多,我用的是腾讯云的,进入腾讯云官网,云产品的证书管理,可免费申请。 nodejs服务器部署最后一篇文章,部署ssl证书,升级http为https,其实网上相关教程有很多,但是略麻烦,本教程让你一切从简,5分钟搞定https,免费一年哦 申请s...
摘要:程序的入口类打开网址访问,网页显示这就说明,从获取了的属性,而是从仓库读取的如图本文源码下载四参考资料优秀文章推荐史上最简单的教程终章史上最简单的教程第一篇服务的注册与发现史上最简单的教程第七篇高可用的分布式配置中心 转载请标明出处: http://blog.csdn.net/forezp/a...本文出自方志朋的博客在上一篇文章讲述zuul的时候,已经提到过,使用配置服务来保存各个服...
摘要:自动化测试和持续集成发布。在服务型环境中部署和调整数据库或其他的后台应用。容器与镜像的关系类似于面向对象编程中的对象与类。容器容器是独立运行的一个或一组应用。提供了庞大的镜像集合供使用。 还在按照mysql安装教程一步一步配置服务配置账户吗?还在为每开一个新环境重新配置这些服务感到苦恼吗?使用Docker,服务快速构建部署。解决你的研发时间,早点下班~现代技术,还不会docker你就落...
阅读 2904·2021-11-15 18:02
阅读 3798·2021-10-14 09:43
阅读 3731·2021-09-08 10:41
阅读 2518·2019-08-30 15:53
阅读 1801·2019-08-30 14:14
阅读 1942·2019-08-29 16:12
阅读 3137·2019-08-29 14:03
阅读 1278·2019-08-29 13:46