如何为你的网站部署https

By iswbm / Published At 2024-06-16 / In categories Web

https, web

要想使用 HTTPS ,要做的事情还是有点多的:

  1. 准备一个域名和服务器(自行准备)
  2. 并将该域名解析到你的服务器ip上
  3. 生成 CSR 证书请求文件
  4. 拿着 CSR 文件去申请证书
  5. 把申请到的证书部署到你的服务器上

1. 设置 DNS 解析

我有一个域名 iswbm.com,其下有好多的子域名,比如写 Python 的在线博客 python.iswbm.com,还有写 Golang 的在线博客 golang.iswbm.com,还有我的图床 image.iswbm.com 等等。

这里新建了个子域名 demo.iswbm.com ,并设置其解析到 我的服务器上,如下图(服务器 ip 已码掉)。

2. 搭建 HTTP 站点

为了方便,我这里就使用 Apache 放了一个 HTTP 的静态网页,方法很简单,大家百度即可。

3. 申请 SSL 证书

SSL 数字证书怎么来的呢?

你可以自己制作,也可以向CA权威机构申请。

二者的区别是:

  1. 自己颁发的证书,需要客户端验证通过,也就是需要用户手动安装证书,并将其设置为受信任的根证书。但即使如此,浏览器上( chrome, firefox)仍不认可这种自签名证书,会在地址栏前面提示连接不安全,手动安装证书后,也会提示该证书无效。若想要继续访问,并忽略该提示,可以选择继续访问。
  2. 向权威的数字证书认证机构申请,由于这些机构在网民的电脑里都有相应的根证书,且这些机构是绝对可信任的。因此你在访问网站时,不会提示连接不安全。

下面,我将分别向你展示这两种方法,都是如何操作的。

第一种:向权威CA机构申请

在阿里云和腾讯云都可以 进行 SSL 证书的申请,证书的申请有付费的(价格也不便宜),也有免费的,看了一圈,只有腾讯云有免费的 SSL 证书的申请渠道(阿里云听说以前也有,后来关闭了)。

本篇文章,仅以演示教学之用,所以只用腾讯云的免费证书的就足够啦。

登陆腾讯云,可以看到SSL 证书有分很多种,企业型的,企业型专业版的,增强型,增强型专业版的,还有域名型免费版。

点击选择 域名型免费版

点击 免费快速申请后,填写域名和你的个人邮箱

再点击下一步,会需要你验证域名所有权,验证方式有如下三种

  1. 自动DNS验证
  2. 手动DNS验证
  3. 文件验证

但由于我的域名不是腾讯云平台解析的,因此没有 自动DNS验证的选项,只有其他两种

点击 确认申请 后,会提示你进入域名验证所有权的流程,这里我选择 手动DNS验证。

审核通过后,3s 内就会给你颁发证书,你可以从控制台点击证书下载。

下载下来的会是一个 zip 包。

解压一下,会有不同的服务器类型(有 Apache、IIS、Nginx、Tomcat)的文件夹。

我使用的是 Apache ,在这个文件夹下面有三个文件:

  1. 1_root_bundle.crt:根证书
  2. 2_demo.iswbm.com.crt:域名证书
  3. 3_demo.iswbm.com.key:私钥文件

这三个文件,下一步会部署于我的服务器上。

接下来讲第二种 SSL 证书申请方式。

第二种:自签名的 SSL 证书

没有权威的第三方 CA 机构给自己颁发证书,那就自己给自己颁发咯。

自签名 SSL 的证书制作过程,可以分为两步:

  1. 自己要当 CA 机构,那 CA 有的 CA 根证书、私钥 一样都不能少,因此第一步:生成 CA 的 crt 证书 和 CA 的私钥。
  2. 要申请证书,首先服务器自己要有一个密钥对(公钥和私钥)
  3. 拿着上面生成的公钥,制作一个 CSR 证书申请文件
  4. 用第一步的 CA 私钥,给这个 CSR 签名,生成咱所需要的 SSL 数字证书文件。

步骤很多,命令很多,命令所带的参数更多,对于只想学习证书签发流程的你,把这些命令都背下来,并不是一个好的选择,毕竟这种事可能也干不了几次。

因此,我把这些步骤、命令,都整合成一个 shell 脚本,你只要执行这个脚本就行了。

$ bash create_self-signed-cert.sh --ssl-domain=demo.iswbm.com --ssl-trusted-domain=demo.iswbm.com --ssl-size=2048 --ssl-date=3650

对应的参数的解释,在脚本中都有解释

这个脚本过长,不好直接贴上来,我将它放在我的公众号(Python编程时光)后台,你可以直接回复『证书签名』直接获取下载。

执行完成后,会在当前目录下生成好多个文件。

其中,只有两个文件对我们有用

4. 部署 SSL 证书

根据服务器的类型不同,部署安装的方式有有所区别,腾讯云的操作文档已经非常详细了,你可以通过这个链接访问到如下的文档:https://cloud.tencent.com/document/product/400/4143

这里我将以 CentOS 7.2 + Apache 为例,演示如何部署 SSL 证书。

先安装一下 mod_ssl

$ yum install -y mod_ssl

安装完后,在 /etc/httpd/conf.d/ 目录下 会有个 ssl.conf 文件。

编辑修改这个文件,以下是我的配置供你参考

<VirtualHost 0.0.0.0:443>
     DocumentRoot "/var/www/html" 
     #填写证书名称
     ServerName demo.iswbm.com
     #启用 SSL 功能
     SSLEngine on 
     #证书文件的路径
     SSLCertificateFile /etc/pki/tls/certs/demo.iswbm.com.crt
     #私钥文件的路径
     SSLCertificateKeyFile /etc/pki/tls/private/demo.iswbm.com.key
     #根证书文件的路径
     SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt
</VirtualHost>

如果你的证书是从权威 CA 机构上申请来的。

比如我上面从腾讯云上申请来的,那么这三个文件就是从已经从腾讯云的控制台上下载下来的那三个文件。

在修改完后,务必记得把下载的这三个文件,放到相应的目录中去。

配置完 ssl.conf,可能还需要你 check 一下 /etc/httpd/conf/httpd.conf 的一些配置,这些配置一般用默认的就可以,但是以防万一,还是写一下吧

Include conf.modules.d/*.conf

写这一行的目的,就是为了 httpd 去加载 mod_ssl 这个模块

$ cat /etc/httpd/conf.modules.d/00-ssl.conf 
LoadModule ssl_module modules/mod_ssl.so

一切配置完成后,记得重启一下 httpd 服务

$ systemctl restart httpd

然后使用 chrome 访问一下 https//demo.iswbm.com 看看,大功告成。

而如果你的证书是自签名的。

ssl.conf 配置文件下的应该改成这样

<VirtualHost 0.0.0.0:443>
     DocumentRoot "/var/www/html" 
     #填写证书名称
     ServerName demo.iswbm.com
     #启用 SSL 功能
     SSLEngine on 
     #证书文件的路径
     SSLCertificateFile /etc/pki/tls/certs/tls.crt
     #私钥文件的路径
     SSLCertificateKeyFile /etc/pki/tls/private/tls.key
</VirtualHost>

同时记得把这两个文件也拷贝到相应的目录下

$ cp tls.crt /etc/pki/tls/certs/
$ cp tls.key /etc/pki/tls/private/

最后还是不要忘了重启 httpd

$ systemctl restart httpd

试着用 chrome 访问一下,可以看到 chrome 提示该连接不安全

如果执意要访问,可以点击左下方的 继续前往,这样以后再访问的时候,就不会再出现这个警告页面了。

不安全 三个字,让人很没有安全感,那有没有办法去掉呢?

答案是,没有,只要是自签名的证书,在 chrome ,firefox 等主流浏览器看来都是不安全的。

即使你把这个根证书添加到你的受信任的证书列表中,也是徒然。

下面就试着来安装一下这个根证书。

按照下图指示,拖动证书到本地磁盘上。

打开 Mac 上的 钥匙串访问

点击 登陆,然后再拖动这个证书到窗口中进行安装

右键该证书,点击 显示简介,跳出下面的界面后,再点击 信任,把 IP 安全选择选为 始终信任

设置完后,再访问下 demo.iswbm.com ,仍然显示连接不安全,并且证书是无效的

点击证书,显示证书,该证书确实已经放入信任列表中了。

5. 宝塔申请证书

注册并登陆宝塔(https://bt.cn),然后进入控制面板。

点击申请证书

选择免费的就好

填写你的域名后,支付订单(其实不要钱)。

然后登陆我的阿里去域名解析,根据如下提示去添加 DNS解析规则

然后静待一段时间验证成功了,就可以点击如下按钮进行下载

下载到本地后,你会得到一个 zip 包,解压一下,就可以看到证书文件及私钥。

因为我的博客使用的是 Nginx,因此我该 Nginx 下的两个文件上传到我的服务器上的 nginx 目录下.

具体怎么上传呢?你可以使用远程拷贝软件,例如 WinSCP,也可以使用 lrzsz (推荐使用)。

传到哪个目录下呢?

先使用 find 命令查找一下你的 nginx.conf 路径

$ find / -name nginx.conf
/usr/local/nginx/conf/nginx.conf

你的证书文件可以和 nginx.conf 放在同一目录下

/usr/local/nginx/conf

接下来使用 vim 编辑该文件,找到 server,添加如下行( server 原本的内容 我使用 ... 表示,意思是不需要去动。 )

server
    {
        listen 443 ssl;
        # 注释掉该行
				# listen 80 default_server reuseport;
			
        #证书文件名称
        ssl_certificate 1_iswbm.com_bundle.pem;
        #私钥文件名称
        ssl_certificate_key 0_iswbm.com.key;

				...
    }

尝试着登陆一下

6. 七牛去图床开启https

登陆七牛云

然后进入 证书管理 上传证书。

进入对象存储 -> 域名管理,找到 HTTPS 配置的位置,点击 修改配置

将按钮置为开启状态,选择我们刚刚上传的证书。

设置完后,并不能立马使用

域名的升级需要一定时间,等待即可。

参考文档

iswbm

Author

iswbm

Cloud Computing & Container & Front-end & Back-end R&D Engineer. I like to explore new technologies, and in my spare time, I also play around with Logseq and other efficiency tools. You can follow me on GitHub to learn more, or add me on WeChat (stromwbm) to communicate with me.