用Apache httpd创建HTTPS服务器
首先
我們將利用非常常用的Apache httpd作為Web伺服器,進行構建具有HTTP / HTTPS連接的網頁伺服器的練習。操作系統為CentOS 7.4,Apache版本為2.4.6。
直到HTTP服务器准备就绪
Apache的安装
因为已经包含在CentOS的默认仓库中了,所以我们可以使用yum来进行安装。
# yum -y install httpd
# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built: Oct 19 2017 20:39:16
立即启动
我们安装完成后立即启动并进行测试试试看。
# systemctl start httpd
# systemctl is-active httpd
active
直到HTTPS服务器准备好
安装SSL模块
接下来是主要的HTTPS服务器建设。要在Apache中使用HTTPS功能,需要安装一个称为mod_ssl的模块,所以首先我们来安装它。
# yum -y install mod_ssl
# httpd -M |grep ssl
ssl_module (shared)
创建密钥和服务器证书
使用openssl genrsa命令创建用于SSL握手的密钥。您可以使用该命令生成密钥,然后将其重定向到key文件中。
# openssl genrsa > server.key
Generating RSA private key, 2048 bit long modulus
...........+++
..........................+++
e is 65537 (0x10001)
接下来我们要创建CSR文件。CSR文件是在向认证机构申请服务器证书时所使用的文件,可以使用openssl req -new -key 命令来创建。同样,我们也要将其重定向并写入文件中。这个命令是交互式的,所以原本应该认真地填写FQDN等信息,但出于练习的目的,我们将全部跳过,直接按Enter键即可。
# openssl req -new -key server.key > server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
好的,现在是服务器证书的最后一步了。通常来说,我们需要将这个CSR文件提交给认证机构进行签名,但由于想要免费处理,所以我自己来签名。使用先前创建的CSR作为输入,执行以下命令。
# openssl x509 -req -signkey server.key < server.csr > server.crt
Signature ok
subject=/C=XX/L=Default City/O=Default Company Ltd
Getting Private key
一切问题,证书(server.crt)已创建完成。CSR在此阶段可以删除,没问题。
# rm server.csr
私钥和服务器证书的配置
将创建的密钥和证书放置在/etc/httpd/目录下。尽管没有明确的规定要放在哪里,但决定将其放置在/etc/httpd/conf/ssl.key和/etc/httpd/conf/ssl.crt目录下。
参考:http://www.apache.com/how-to-setup-an-ssl-certificate-on-apache/
# mkdir /etc/httpd/conf/ssl.key
# mkdir /etc/httpd/conf/ssl.crt
# mv server.key /etc/httpd/conf/ssl.key/
# mv server.crt /etc/httpd/conf/ssl.crt/
SSL模块的配置
在/etc/httpd/conf.d/ssl.conf文件中设置已部署密钥和证书的路径。
# vi /etc/httpd/conf.d/ssl.conf
我将按照以下方式进行修改
# SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt
# SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key
在完成之后,我们终于可以重新启动Apache并尝试连接了。
# systemctl restart httpd
# systemctl is-active httpd
active
做到了!
想法
我第一次在Apache上进行了HTTPS服务器的配置。比我想象的更困难。由于对openssl命令的理解还不够深入,如果有机会的话,我想进一步研究一下。