关于搭建HTTPS服务...

关于 HTTPS 的基本原理大家都已经不再陌生,今天和大家说说如何搭建一个支持 HTTPS 的服务端。

服务端的 HTTPS

HTTPS 已经几乎成为了当前互联网推荐的通信方式,它能最大化保证信息传输的安全,从去年苹果的强制 HTTPS ,到如今各大网站都支持了 HTTPS。它会越来越普及。

之前写过几篇关于 HTTPS 原理的文章,有用户留言希望了解一些如何在服务端搭建 HTTPS 服务的内容,这次就和大家聊聊这个话题。

SSL 证书

搭建一个 HTTPS 站点,第一步要做的就是申请 SSL 证书, 而且要在标准的证书颁发机构来申请。 当然,从技术上来说,你可以使用自签名证书,但自签名证书会被所有的浏览器视为不安全的证书,并且会给用户报错,就像这样:

所以,还是需要申请一个正规的证书的。 可申请证书的颁发机构有很多,比如 GoDaddy,Comodo,Verisign 等等。价格从一年几美金到几十美金不等。

我们就以 GoDaddy 为例,带大家了解一下流程。 在 GoDaddy 的首页有一个 Web Security 标签,点击这个标签后可以找到 SSL Certificates 选项:

点击进去, 就可以看到可选的几个证书形式,有单域名的,还有允许多个二级域名的等:

避免广告嫌疑,下面的价格信息略去了~,这里只给大家介绍流程,帮助大家了解。 证书服务商大家可以自行选择。

接下来,证书颁发机构会让你填写一个叫做 CSR 的东西, 如果大家搞 iOS 开发对这个应该不陌生,申请苹果开发者证书的时候大家也做过类似的事情。

CSR 全称 Certificate Signing request。 顾名思义就是用于申请证书必须的一些信息,在 Lunix 系统中,它可以通过命令生成(大多数的服务端应该都是基于 Linux 的,所以我们用它来作为例子):

  1. $ openssl req -new -newkey rsa:2048 -nodes -keyout yourdomain.key -out yourdomain.csr

openssl 命令,如果你的系统没有安装的话,可以通过包管理先安装。 需要把这里面的 yourdomain.key 和 yourdomain.csr 替换成你自己的名称,可以是域名,也可以是其他标识。

生成成功后,可以用 cat 命令输出 yourdomain.csr 中的内容:

  1. $ cat yourdomain.csr

会在命令行输出 CSR 的内容,把这段内容复制到前面截图中的文本框中,然后点击生成就好了。

注意,这里的 yourdomain.key 文件你要保管好。 这是你证书的私钥,后面配置 HTTPS 的时候需要用到它。 并且它不能重新生成,而且不能泄露出去。原因可以参考我前面关于 HTTPS 原理的相关文章。

与此同时,证书颁发机构在你提交 CSR 之后,会给你生成证书文件, Godaddy 会生成两个证书,一个是你站点的证书,一个是根证书。 把它们下载到你的服务器上面。

Apache 服务端配置

证书准备好之后,我们要对服务端程序进行配置,让它支持 HTTPS。这里我给大家以 CentOS 7 操作系统, Apache 2.x 服务端程序为例。

Apache 的 HTTPS 配置文件一般在 /etc/httpd/conf.d/ssl.conf 这个位置。 用 vim 编辑器打开它, 然后加入这样一个节点:

  1. <VirtualHost *:443>
  2. SSLEngine On
  3. SSLCertificateFile /root/yoursite.crt
  4. SSLCertificateKeyFile /root/yoursite.key
  5. SSLCACertificateFile /root/rootcert.crt
  6. ServerAdmin admin@yoursite.com
  7. ServerName yoursite.com
  8. DocumentRoot /var/www/html/
  9. </VirtualHost>

这里用到了我们前面准备的证书和秘钥。 SSLCertificateFile 是你站点的证书, SSLCACertificateFile 是根证书, SSLCertificateKeyFile 是只保存在你服务器的私钥。

有了这些信息后,Apache 就可以正确的处理 HTTPS 请求了。 在这之前我们还需要在做最后一步操作, 编辑 /etc/httpd/conf/httpd.conf 文件, 这个是 Apache 的主配置文件, 加入这样一行:

  1. Listen 443

这个是让你的服务端同时监听 443 端口。 因为 HTTPS 的默认端口是 443, 所以这个设置是必须要有的。

一切都就绪后,重启你的服务器:

  1. systemctl restart httpd

然后再用浏览器输入 https://yoursite.com 访问你的站点时,就应该可以看到 HTTPS 验证成功的小锁头了。

防火墙设置

如果配置都就绪,你重启了之后,依然不能正常访问,有可能是你的防火墙把 443 端口拦截了,把它打开:

  1. iptables -A INPUT -p tcp -m tcp --sport 443 -j ACCEPT
  2. iptables -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT

结束

目前成熟的 Web 服务程序都有对 HTTPS 很好的支持,只需要经过简单的配置,即可完成 HTTPS 服务器的搭建。 而 HTTPS 之所以相对性能消耗更大,是因为每次数据传输都需要进行加密和解密的操作。 作为 APP 开发者们,可能对服务端的技术了解的并没有那么深,可以把它作为一个备忘录,日后用到的时候再来看看。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏康怀帅的专栏

macOS 对 gdb 进行代码签名

在 macOS 使用 GDB 调试 C 语言代码,必须对 gdb 进行代码签名,否则 GDB 不能运行! 创建证书 钥匙串访问 打开菜单:钥匙串访问-》证书助理...

34740
来自专栏james大数据架构

Android 程序打包及签名

为什么要签名???     开发Android的人这么多,完全有可能大家都把类名,包名起成了一个同样的名字,这时候如何区分?签名这时候就是起区分作用的。    ...

23960
来自专栏阮一峰的网络日志

GPG入门教程

前两篇文章,我介绍了RSA算法。 今天,就接着来看,现实中怎么使用这个算法,对信息加密和解密。这要用到GnuPG软件(简称GPG),它是目前最流行、最好用的加密...

40570
来自专栏黑白安全

手机验证码常见漏洞 总结 任意用户密码重置

  手机验证码在web应用中得到越来越多的应用,通常在用户登陆,用户注册,密码重置等业务模块用手机验证码进行身份验证。针对手机验证码可能存在的问题,收集了一些手...

1.2K20
来自专栏魏艾斯博客www.vpsss.net

腾讯云 CDN 续期 Let’s Encrypt 证书的操作过程

今天要说的是腾讯云 CDN 续期 Let’s Encrypt 证书的操作过程,常来的朋友都知道魏艾斯博客放在腾讯云了(点我打开抢 3 折特惠),同时还用了腾讯云...

57010
来自专栏全沾开发(huā)

记一个node实现的图形验证码从0到1

记一个node实现的图形验证码从0到1 最近做了一个项目,需要用到给用户发送短信验证码,短信必然走的是第三方的服务。。 so 每一条...

32770
来自专栏日暮星辰

Let’s Encrypt 宣布 ACME v2 正式支持通配符证书

Let’s Encrypt 宣布 ACME v2 正式支持通配符证书。Let’s Encrypt 宣称将继续清除 Web 上采用 HTTPS 的障碍,让每个网站...

19840
来自专栏晓晨的专栏

获取 Let's Encrypt 免费通配符证书实现Https

47730
来自专栏吴伟祥

聊一聊HTTPS和SSL/TLS 转

HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)简单的讲就是HTTP的安全版本。即HTT...

6810
来自专栏禹都一只猫博客

certbot免费SSL证书申请部署

32630

扫码关注云+社区

领取腾讯云代金券