阿里云ECS服务器Ubuntu主机给Apache配置SSL证书之前把博客网站搭建在树莓派上,就放在床头,除了吵点儿,运行没有什么太大的问题,用了内网穿透,外网访问也okay,树莓派搭建博客的文章:树莓派搭建wordpress博客,但是我就是喜欢折腾,总喜欢搞点儿自己从来没有搞过的,在对比了几家云服务商之后感觉都差不多,因为我的域名是在阿里云购买的,省的麻烦,就买了阿里云的服务器,可真是不便宜啊,但还是续费了三个月的,总共一百多,直接购买三年的好像最划算,不过要一千两百多,鉴于最近一贫如洗,还是少买了点儿;最坑爹的是,我买完第二天就看到了百度云搞活动,一样的配置一年八十几,心在滴血……所以啊,以后还是要考虑清楚了再下手哇。废话不多说,进入正题。
今天之所以要记这篇博客,是因为我花了半天时间搞这玩意儿,本来很简单的步骤,被我搞得很复杂,特此记录下来,以防以后我再遇到相同的问题到处搜索,焦头烂额,也希望这篇文章能帮助一些和我一样的小伙伴。
1. 申请免费的ssl证书
在阿里云ssl证书控制台购买免费版的个人ssl证书,前提是你要有一个在阿里云买的域名,购买成功之后就可以在控制台下载证书,下载下来是一个zip的压缩包,先不要解压,等待会儿上传到服务器再解压。
2. 上传SSL证书
我用的是putty上传的,因为在网上找了xshell竟然要钱,这怎么行。在putty安装目录里面有个pscp.exe的程序,打开windows命令行或powershell命令行,切换到putty的安装目录,比如我的是 cd ‘C:\Program Files\PuTTY\’,然后运行命令:
pscp 要上传的文件路径 root@服务器主机IP地址:要存入的主机的路径
比如我的就是:
pscp D:\下载\xxx_apache.zip root@xxx:/home/wenxiao/zips.zip
运行完这个命令之后,文件就被上传到指定位置了,我用的是密钥对登录,没有输密码,如果云服务器没有绑定密钥对的话,可能需要输入密码。证书上传到服务器之后,接下来的事情就好办多了。
3. 安装openssl
sudo apt-get install openssl
4. 部署ssl证书
关于部署ssl证书,阿里云ssl证书管理控制台有非常全面的帮助文档,所以这一块的内容大多是来自帮助文档。我着重记录我所遇到的问题和解决方法。
1.在apache2的配置目录下新建ssl文件夹,并把刚才上传的证书文件copy到该文件夹下面,用unzip程序解压(如果提示没有unzip程序,apt-get install unzip 安装即可)。
cd /etc/apache2 # 切换到apache2的配置目录
sudo mkdir ssl # 创建ssl文件夹
cd ./ssl # 切换到ssl文件夹
sudo cp /home/wenxiao/zips.zip ./ # 将上传的证书文件复制到ssl文件夹中
sudo unzip zips.zip # 解压证书压缩包
2. 启动ssl模块
sudo a2enmod ssl
ssl模块启动后切换到/etc/apache2/sites-available文件夹,查看default-ssl.conf文件
3.修改ssl配置文件
sudo vim /etc/apache2/sites-available/default-ssl.conf
#在文件中找到以下字段,并修改
<IfModules mod_ssl.c>
<VirtualHost *:443>
ServerName #修改为证书绑定的域名www.YourDomainName.com。
SSLCertificateFile /etc/apache2/ssl/www.YourDomainName_public.crt #将/etc/apache2/ssl/www.YourDomainName.com_public.crt替换为证书文件路径+证书文件名。
SSLCertificateKeyFile /etc/ssl/apache2/www.YourDomainName.com.key #将/etc/apache2/ssl/www.YourDomainName.com.key替换为证书密钥文件路径+证书密钥文件名。
SSLCertificateChainFile /etc/apache2/ssl/www.YourDomainName.com_chain.crt #将/etc/apache2/ssl/www.YourDomainName.com_chain.crt替换为证书链文件路径+证书链文件名。
4. 使用以下命令将修改好的配置文件映射到sites-enable文件夹下面
sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/001-ssl.conf
5. 运行以下命令重新加载Apache 2配置文件。
sudo /etc/init.d/apache2 force-reload
或
service apache2 force-reload
6. 运行以下命令重启apahce服务
sudo /etc/init.d/apache2 restart
到这一步,ssl证书就部署完成了,在浏览器中输入:https://你的域名应该就可以登录,浏览器地址栏左边会显示一把小锁,这就表明你的主机apache服务的https开通成功了。就可以去网站的主页配置和相对链接设置中把地址改成https的了。
7.依然存在的问题
在开通https之后,可以通过https://域名 来访问网站,但是http:域名 也是可以访问网站的,而且,在浏览器地址栏直接输入域名后,还是会跳转到非https网页,这样总是不完美的,在网上查找了一番并问了一些网友之后,好像要通过url重写,这块我还不是很懂,好在不是特别紧急的事,先放着吧,等我搞明白了在来设置。
5. 总结和问题反思
这次部署过程中,在几个问题上花费了大量的时间,最后都发现是非常蠢的事情。
①在部署完之后,要重启apache2的时候报错,提示查看systemctl status apache2.service,这是查看错误报告的,出来一大堆英文,根本就没看,在网上搜了老久,没有一个解决问题的方案。最后没辙,只能硬着头皮把错误报告仔细的看了一遍,发现里面有一句话,非常清楚的指出了那个配置文件的哪一行出现了问题:
AH00526: Syntax error on line 9 of /etc/apache2/ports.conf:
多么明显的指示,顺着路找回去发现ports.conf文件中第九行果真有一句之前不知道从网上哪里看到的添加的一句话,注释掉再重启就不会再报错了。所以啊,如果遇到了问题,一定要看程序错误报告,冷静的分析,不要跟个无头苍蝇一样到处乱撞,浪费时间,还显得很没有水准。
②在/etc/apache2/sites-available/default-ssl.conf文件中,对证书的路径一定要设置准确,不然也是不能成功的,这些都是细节,在排错中要非常仔细。
③网站目前依然存在的问题,非常诡异,就是不能上传图片,它不是一直不能上传,有时候能,有时候不能,前两天我还上传了个视频呢,这两天上传的图片只能存在几秒钟,也就是刚上传上来还好,过一会儿就编程了一个空白的,不过以前上传的文件都好好的。暂时还搞不明白,怀疑是阿里云盾或者什么安全服务搞得鬼,以后解决了这个问题再来补充更新。看到的朋友如果知道这鬼问题怎么解决的话一定请在评论区指教,谢谢。
这篇ubuntu的部署笔记,我认为适用于大多数基于debian的系统,而且,原理明白了,就算是不同的系统,也不会很难,网络上从来都不缺这类的内容,而我认为最重要的是要学会去看程序错误报告,这是解决问题的最佳捷径!