在 CentOS 设置一个 SSL 加密的网页服务器
<<TableOfContents: execution failed [Argument "maxdepth" must be an integer value, not "[1]"] (see also the log)>>
这个指引会解释如何设置一个支持 https 的网站。这个教程使用一个自我签署的金钥,因此它适用於个人网站或作测试用途。这个指引并未经修订,因此请自行承担风险,并进行备份!
1. 取得所需的软件
你需要为一台 SSL 加密的网页服务器预备数件东西。视乎你的安装,你可能并未安装 OpenSSL 或 mod_ssl,Apache 连接到 OpenSSL 的界面。如果你有需要,请用 yum 来安装它们。
yum install mod_ssl openssl
yum 会告诉你它们已经安装,或者为你安装它们。
2. 产生一张自我签署的凭证
我们将会利用 OpenSSL 来产生一张自我签署的凭证。如果你在一台生产用的服务器上做这个动作,你应该会想从一个被信赖的凭证机构取得一条金钥,但假若你只是用在一个私人网站上或作测试之用,自我签署的凭证已经足够了。要创建金钥,你必须是 root 用户,因此你可使用 su 变为 root 用户,或在指令前面运用 sudo
# 产生私钥 openssl genrsa -out ca.key 2048 # 产生 CSR openssl req -new -key ca.key -out ca.csr # 产生自我签署的金钥 openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt # 复制文件至正确位置 cp ca.crt /etc/pki/tls/certs cp ca.key /etc/pki/tls/private/ca.key cp ca.csr /etc/pki/tls/private/ca.csr
|
警告:如果你采用 SELinux,请确保你复制这些文件而不是迁移它们。否则 Apache 将会投诉关于违漏了的凭证档,因为它不能读入这些拥有错误 SELinux 脉络的凭证档。 |
假如你迁移了这些文件而不是复制它们,你可以用以下的指命来矫正这些文件的 SELinux 脉络,因为 /etc/pki/* 的正确脉络定义已包含在 SELinux 政策里。
restorecon -RvF /etc/pki
接著我们须要更新 Apache SSL 的配置文件
vi +/SSLCertificateFile /etc/httpd/conf.d/ssl.conf
请修改路径至金钥文件的存储位置。如果你采用上面的方法,这会是
SSLCertificateFile /etc/pki/tls/certs/ca.crt
然后在再低数行的位置为凭证金钥文件设置正确路径。如果你按照上面的指引,这会是:
SSLCertificateKeyFile /etc/pki/tls/private/ca.key
存储及离开文件,然后重新引导 Apache
/etc/init.d/httpd restart
假若一切正常的话,你现在应该可以通过 https 连接到你的服务器,并看见 CentOS 的缺省页面。由於凭证是自我签署的,浏览器一般会徵询你是否接纳这个凭证。
3. 设置虚拟主机
一如你为 http 在端口 80 上设立 VirtualHost,你亦可为 https 在端口 443 上作样似的设置。一个在端口 80 上的网站的典型 VirtualHost 有如下样子
<VirtualHost *:80> <Directory /var/www/vhosts/yoursite.com/httpdocs> AllowOverride All </Directory> DocumentRoot /var/www/vhosts/yoursite.com/httpdocs ServerName yoursite.com </VirtualHost>
要在端口 443 上增加一个姊妹网站,你需要在你的文件顶部加入下列内容
NameVirtualHost *:443
然后再加入一个类似如下的 VirtualHost 记录:
<VirtualHost *:443> SSLEngine on SSLCertificateFile /etc/pki/tls/certs/ca.crt SSLCertificateKeyFile /etc/pki/tls/private/ca.key <Directory /var/www/vhosts/yoursite.com/httpsdocs> AllowOverride All </Directory> DocumentRoot /var/www/vhosts/yoursite.com/httpsdocs ServerName yoursite.com </VirtualHost>
利用这个指令重新引导 Apache
/etc/init.d/httpd restart
4. 设置防火墙
你现在应该拥有一个以自我签署凭证来支持 https 的网站。如果你未能连接,你或许需要在防火墙上打开端口。要这样做,请更改你的 iptables 规则:
iptables -A INPUT -p tcp --dport 443 -j ACCEPT /sbin/service iptables save iptables -L -v
Translation of revision 7