用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
image.png

直到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
image.png

做到了!

想法

我第一次在Apache上进行了HTTPS服务器的配置。比我想象的更困难。由于对openssl命令的理解还不够深入,如果有机会的话,我想进一步研究一下。

广告
将在 10 秒后关闭
bannerAds