VPS在CentOS7系统用Apache配置自签名SSL
注意:此文章因为年代久远,内容正确性不能得到保障,更何况当时这玩意儿我也是跟着别的不知道什么教程做的,真的不懂Apache,只懂NGINX。留作个存档当做我好久开始写Blog的记录吧,别读了。
引言
在VPS上搭建WordPress、Seafile的时候,使用http协议明文传输使得信息不安全,但国际认证的SSL又需要购买,为此,我们可以利用Apache创建自签名的SSL证书。
注意:以下建立在已经安装Apache下的VPS前提上。
安装Mod SSL
1 | sudo yum install mod_ssl |
创建SSL证书
①创建新目录存储秘钥
1 | sudo mkdir /etc/ssl/private |
②修改权限使得只能被root用户修改
1 | sudo chmod 700 /etc/ssl/private |
③创建RSA加密的SSL密钥和证书文件OpenSSL(1)
1 | sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt |
期间会提示你按照以下格式输入信息:
1 | Country Name (2 letter code) [XX]:US |
如果你不希望输入某个信息,只需输入“.”那么这一项便会设置为默认设置。
④创建DH组
1 | sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 |
⑤将文件附加到自签名证书末尾
1 | cat /etc/ssl/certs/dhparam.pem | sudo tee -a /etc/ssl/certs/apache-selfsigned.crt |
设置证书
使用root权限在文本编辑器中打开Apache的SSL配置文件:
1 | sudo vim /etc/httpd/conf.d/ssl.conf |
vim
文本编辑器使用方法:
i开始编辑,esc进入末行模式,末行模式下:x保存并退出,:q不保存退出。
也可以使用nano
编辑器,即将命令中的vim
改成nano
:
1 | sudo nano /etc/httpd/conf.d/ssl.conf |
编辑成功后Ctrl+X保存并退出
nano
编辑器看起来比vim
容易得多。
调整VirtualHost命令
找到以<VirtualHost _default_:443>开头的部分
取消SeverName
行并替换www.example.com
为您的域名或服务器IP地址
1 | \<VirtualHost _default_:443\> |
接下来,找到SSLProtocol
和SSLCipherSuite
行,然后删除它们或将它们注释掉。我们暂时粘贴的配置将提供比CentOS Apache所包含的默认设置更安全的设置:
1 | . . . |
找到SSLCertificateFile
和SSLCertificateKeyFile
行并将它们更改为我们在/etc/httpd/ssl
以下目录中创建的目录:
1 | SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt |
我们现在已完成实际VirtualHost
块内的更改。下一个更改将发生在</VirtualHost>同一文件中的结束标记之后。
设置安全SSL参数
按照如下方式复制命令参数:
1 | . . . |
全部修改好后保存并关闭。
修改虚机文件以重定向到HTTPS(可选项)
现在,服务器将提供未加密的HTTP和加密的HTTPS流量。为了更好的安全性,建议在大多数情况下自动将HTTP重定向到HTTPS。如果您不想要或不需要此功能,可以安全地跳过本节。
要将所有流量重定向为SSL加密,请创建并打开以目录结尾.conf
的/etc/httpd/conf.d
文件:
1 | sudo vi /etc/httpd/conf.d/non-ssl.conf |
在内部,创建一个VirtualHost
块以匹配端口80上的请求。在内部,使用该ServerName
指令再次匹配您的域名或IP地址。然后,使用Redirect匹配任何请求并将它们发送到SSL VirtualHost
。确保包含尾部斜杠:
1 | <VirtualHost *:80> |
完成后保存并关闭此文件。
激活证书
到目前为止,您已创建SSL证书并配置Web服务器以将其应用于您的站点。要应用所有这些更改并开始使用SSL加密,您可以重新启动Apache服务器以重新加载其配置和模块。
首先,键入以下命令检查配置文件中是否存在语法错误
1 | sudo apachectl configtest |
只要输出结束Syntax OK,您就可以继续使用。如果这不是输出的一部分,请检查文件的语法,然后重试:
1 | Output |
键入以下内容,重新启动Apache服务器以应用更改:
1 | sudo systemctl restart httpd.service |
接下来,确保防火墙中的端口80和443已打开。如果您没有运行防火墙,则可以跳过。
或者之前参照《VPS按照OwnCloud以及SS的实录》安装了OwnCloud,那么代表已经打开了firewalld防火墙,则也可以跳过。
如果您正在运行firewalld防火墙,则可以通过键入以下命令打开这些端口:
1 | sudo firewall-cmd –add-service=http |
如果运行iptables防火墙,则需要运行的命令高度依赖于当前的规则集。对于基本规则集,您可以通过键入以下内容来添加HTTP和HTTPS访问:
1 | sudo iptables -I INPUT -p tcp -m tcp –dport 80 -j ACCEPT |
在您的Web浏览器中,尝试访问您的域名或IP https://以查看您的新证书。
写在后面
Web浏览器可能会警告该站点的安全证书不受信任。由于我们创建的证书未由浏览器信任的证书颁发机构签名,因此浏览器无法验证尝试连接的服务器的身份。这是因为我们创建了一个自签名证书而不是受信任的CA签名证书。
在浏览器的身份验证中添加例外后,你将被允许进入新安全的站点。
如果你创建的是公共网站而不是自娱自乐的网盘或者博客,那么请向受信任的证书颁发机构购买SSL证书。容易获得的途径之一是腾讯的免费SSL。
在使用自签名证书之前,应该考虑清楚。