资讯专栏INFORMATION COLUMN

Web 开发学习笔记(3) --- 申请和部署HTTPS证书

gekylin / 642人阅读

摘要:简介现在已经进入的时代证书目前应用广泛发展迅速相较于明文传输的更加安全即由于其安全层使用的是因此也可以称为或关于证书的分类可以参考这篇博客证书需要向国际公认的证书证书认证机构申请接下来我们将使用自动化证书管理工具为我们的域名申请颁发的证书然

简介

现在已经进入 HTTPS 的时代, HTTPS 证书 目前应用广泛, 发展迅速. 相较于明文传输的 HTTP, HTTPS 更加安全.


HTTPSHypertext Transfer Protocol Secure, 由于其安全层使用的是 TLS/SSL, 因此 HTTPS 也可以称为 HTTP over TLSHTTP over SSL. 关于 HTTPS 证书的分类, 可以参考这篇博客


HTTPS 证书 需要向国际公认的证书证书认证机构 Certificate Authority (CA) 申请.


接下来, 我们将使用自动化证书管理工具 acme.sh 为我们的域名申请 Let"s Encrypt 颁发的 HTTPS 证书, 然后将其部署在我们的网站上.


本文假设我们的域名为 www.awesome.com


开发环境

在前文的基础上, 我们只需增加 acme.sh 这个工具. 它的中文文档在这里. 安装 acme.sh 的过程很简单, 在 Terminal 中输入如下命令 acme.sh 即可.


curl  https://get.acme.sh | sh


生成证书

我们可以使用 http 方式来验证我们对域名的所有权.


如果只申请单域名证书 (Single Domain Certificate, 如单域名 www.awesome.com ), 那么在 Terminal 中运行如下命令即可


acme.sh  --issue  -d  www.awesome.com  --standalone

acme 会在当前目录生成一个验证文件, 然后运行一个监听 80 端口的 server, 如果 Let"s Encrypt 成功地通过域名下载了这个文件, 就验证了我们对域名的所有权, 就可以签发证书了.


我们也可以运行一个 file server 监听 80 端口


cd ~/webapp
python3 -m http.server 80

然后在另一个 Terminal 里输入如下命令


cd ~
acme.sh  --issue  -d  www.awesome.com  --webroot  ~/webapp

我们也可以通过 dns 方式来验证我们对域名的所有权. 如果要申请通配符证书 (Wildcard Certificate, 如 *.awesome.com 形式的通用域名), 则需要用 dns 方式进行验证.


首先我们在 Godaddy 上申请开发者 API key & secret, 然后参考 acme.sh 的文档 readme 和 dnsapi, 执行如下命令


export GD_Key="xxxxxxxx"
export GD_Secret="yyyyy"
acme.sh  --issue  --dns dns_gd -d "*.awesome.com" -d awesome.com

如果一切顺利, 我们会发现 Godaddy 的 DNS txt record 中多了一条 _acme-challenge 记录. 接下来acme 会先等待 120s 以待新的纪录生效, 然后通知 Let"s Encrypt 验证我们对域名的所有权, 验证通过后, Let"s Encrypt 会为我们签发证书.


下一节, 我们将讲述如何安装和部署证书


安装和部署证书

对于单域名证书, 根据 acme 的文档, 我们需要执行以下命令, 将证书和公钥放到 ~/ssl/ 文件夹中


acme.sh  --installcert  -d  www.awesome.com  --key-file  ~/ssl/server.key  --fullchain-file  ~/ssl/server.cer

对于通配符证书, 操作也是类似的, 把域名换成 "*.awesome.com" 就好了


acme.sh  --installcert  -d  "*.awesome.com"  --key-file  ~/ssl/server.key  --fullchain-file  ~/sslwebsite/server.cer

然后, 在之前编写的 server 中, 我们需要引入证书和公钥, 从而将明文的消息用 ssl/tls 包裹起来. 根据 Stack Overflow, 这篇文章下面的 Comments, 以及 werkzeug docs, 我们需要在 app.run() 中加上 ssl_context=("~/ssl/server.cer", "~/ssl/server.key") 参数, 再把监听端口改为 443 即可:


# class IndexHandler(...):
#     ...

if __name__ == "__main__":
    app.add_url_rule("/", view_func=IndexHandler.as_view("index"))
    context = ("./server.cer", "./server.key")
    app.run(port=443, host="0.0.0.0", debug=True, threaded=True, ssl_context=context)

至此, 我们的 HTTPS 证书已经申请和部署完成了. 但是我们的 server 目前还存在一个问题, 就是只能访问 https://www.awesome.com, 而原来的 http://www.awesome.com 已经无法访问了, 因为我们的 server 现在只能监听 443 端口而不能监听 80 端口. 下一篇文章, 我们将解决这个问题, 方法是另外写一个 server 来监听 80 端口, 并通过 redirecthttp 服务重定向为 https. 同时, 我们还将学习如何使用 HSTS, 使浏览器默认以更安全的 https 的方式访问我们的网站.


参考链接

https://imququ.com/post/letse...

https://github.com/Neilpang/a...

https://github.com/Neilpang/a...

https://github.com/Neilpang/a...

https://letsencrypt.org/

https://stackoverflow.com/que...

http://flask.pocoo.org/docs/1...

http://flask.pocoo.org/snippe...

http://werkzeug.pocoo.org/doc...

http://werkzeug.pocoo.org/doc...

https://jjayyyyyyy.github.io/...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/101683.html

相关文章

  • 启用 https 的一点记录

    摘要:最近博客从阿里云搬迁到腾讯云,也修改了几个程序上的,顺便也启用了,记录一下。是按流量计费的,感觉没必要,所以使用自定义域名了还得充值块钱如果使用域名的话需要上传证书和私钥的内容,这里的证书推荐使用腾讯云的免费证书,年有效期,不用频繁续签。 近两年越来越多的网站开始使用 https,https 是一个基于 http 协议开发,但是使用了 TLS/SSL 加密了传输数据,所以,简单点说 h...

    animabear 评论0 收藏0
  • Web 开发学习笔记(4) --- 重定向与HSTS

    摘要:回顾通过前几篇文章的内容我们已经搭建了基于框架的一个简单的应用的代码如下此外我们还为其申请了公网和域名并且部署了的证书现在当我们在浏览器地址栏输入即可访问我们的网站不过我们的网站目前还存在几个问题无法访问每次都需要用户手动输入前缀以制定形式 回顾 通过前几篇文章的内容, 我们已经搭建了基于 Flask 框架的一个简单的 Web 应用, server.py 的代码如下 from f...

    kevin 评论0 收藏0
  • Nginx部署HTTPS服务过程与异常处理实践

    摘要:当点击检查配置之后,如果阿里云能够正常访问,则会在左侧给出提示,现在可以返回证书列表,在列表中可以看到当前状态为审核中,如下图审核因为不需要人为干预,所以很快就能下发证书,笔者下发证书的时间大约是分钟左右。 一、背景 笔者所在团队需要开发ios的APP,而apptstore应用商店审核需要应用使用https,所以需要配置https证书,笔者将此次配置的过程与遇到的一些问题记录下来,方便...

    Scliang 评论0 收藏0
  • Nginx部署HTTPS服务过程与异常处理实践

    摘要:当点击检查配置之后,如果阿里云能够正常访问,则会在左侧给出提示,现在可以返回证书列表,在列表中可以看到当前状态为审核中,如下图审核因为不需要人为干预,所以很快就能下发证书,笔者下发证书的时间大约是分钟左右。 一、背景 笔者所在团队需要开发ios的APP,而apptstore应用商店审核需要应用使用https,所以需要配置https证书,笔者将此次配置的过程与遇到的一些问题记录下来,方便...

    lavor 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<