Apache服务器搭建并添加SSL

学习了使用 Apache 搭建网站

在红帽上学习了用 Apache 搭建网站并添加了 SSL 证书
虽说之前也用过 Nginx 和 Apache 搭建过网站,但还是记录一下吧,这次着重学习了自签 SSL 证书和使用自签的 SSL 证书

搭建一个最基本的网站

在给网站添加 SSL 证书之前,你得有一个简单的网页

安装软件

红帽自带了openssl,可以通过命令查看

1
openssl version

安装 Apache 和 ssl 模块

1
yum install httpd mod_ssl -y

创建一个网页

Apache 的默认静态页面的目录是 /var/www/html,这里我就换一个根目录
创建网页的根目录

1
mkdir /web

创建 /web/index.html 文件并编辑网页内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<!DOCTYPE html>
<html>

<head>
<title>你被骗了</title>
<style>
body {
text-align: center;
margin: 0;
padding: 0;
font-family: Arial, sans-serif;
background-color: aqua;
}

header {
margin: 0;
padding: 0;
color: #020202;
}

p {
margin: 10px;
padding: 20px;
font-size: 20px;
color: green;
}
</style>
</head>

<body>
<header>
<p>Never gonna give you up</p>
<p>gonna let you down</p>
<p>Never gonna run around and desert you</p>
<p>Never gonna make you cry</p>
<p>Never gonna say goodbye</p>
<p>Never gonna tell a lie and hurt you</p>
</header>
</body>

</html>

修改目录的权限,添加可执行的权限

1
chmod a+x -R /web

修改配置

修改 Apache 的配置文件 /etc/httpd/conf/httpd.conf
设置监听端口为8080

设置如下的119行根目录DocumentRoot 和131行目录路径 <Directory>,保存并退出

关闭防火墙、selinux

1
2
3
systemctl stop firewalld.service 
setenforce 0
iptables -F

启动 Apache 服务

1
systemctl start httpd

此时客户端浏览器打开 服务器IP:8080 就可以看到刚才的静态页面了,最简单的静态网页搭建完成

为网站添加 SSL 证书

这里我是使用了自签的 SSL 证书,顺便又学了一次 openssl 的使用

CA 服务器生产私钥和证书

CA 服务器生成私钥,并修改其权限为 600

1
2
openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048
chmod 600 /etc/pki/CA/private/cakey.pem

修改 openssl.cnf 文件,红帽上的位置和之前 Arch Linux 和 Ubuntu 的路径相差比较大,它的路径为 /etc/pki/tls/openssl.cnf
修改 [ req_distinguished_name ] 下的各信息,此处填写的是 CA 服务器的默认各种信息,在生成自签证书时直接使用这些默认设置即可,在后面 Apache 服务器生产申请请求文件时,这些信息要一致,否则无法生成自签证书

生成自签证书

1
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650

在生成证书的时候填写信息都直接回车使用默认即可,在设置 Common Name 时填写 CA 服务器的主机名

继续修改 /etc/pki/tls/openssl.cnf 文件,设置已签署的证书、证书序列号等文件的路径

创建这些目录和文件

1
2
3
mkdir /etc/pki/CA/certs /etc/pki/CA/crl /etc/pki/CA/newcerts
touch /etc/pki/CA/index.txt
echo 01 > /etc/pki/CA/serial

如果原本就是设置好的,目录应该也是原本就存在的,只需要创建两个文件即可

HTTP 服务器申请证书

创建 SSL 目录

1
2
3
cd /etc/httpd
mkdir ssl
cd ssl

生成私钥并修改权限为600

1
2
openssl genrsa -out httpd.key 2048
chmod 600 httpd.key

用私钥生成请求

1
openssl req -new -key httpd.key -out httpd.csr

在生成请求文件的时候,注意与CA上的设置的参数要一致,Common Name 设置为要添加 SSL 的网站的域名

将证书发送给 CA 服务器

1
scp httpd.csr CA服务器IP:/tmp

CA 服务器颁发证书

CA 服务器用如下命令颁发证书,证书有效时长为10年

1
openssl ca -in /tmp/httpd.csr -out /tmp/httpd.crt -days 3650

签发完成后,可以查看 index.txt 文件和 serial 文件,可以看到有签署的记录在里面

1
2
cat /etc/pki/CA/index.txt
cat /etc/pki/CA/serial

HTTP 服务器添加 SSL

将证书下载到 HTTP 服务器的 /etc/httpd/ssl 目录下

1
scp CA服务器IP:/tmp/httpd.crt /etc/httpd/ssl

搭建虚拟主机

虚拟主机可以使不同的域名访问同一个IP下的不同目录,实现一台服务器上搭建多个网页的目的
编辑 /etc/httpd/conf/httpd.conf 文件,修改网站的根目录,注释掉即可

创建并编辑文件 /etc/httpd/conf.d/virtualhost.conf

1
2
3
4
<VirtualHost *:8080>
ServerName hello.com
DocumentRoot "/web"
</VirtualHost>

编辑 /etc/httpd/conf.d/ssl.conf 文件,大约从第56行开始,按实际情况修改

1
2
3
4
5
6
<VirtualHost *:443>
ServerName hello.com
DocumentRoot "/web"
SSLEngine on
SSLCertificateFile /etc/httpd/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key

可以用如下命令测试配置是否正确

1
httpd -t

重启 httpd 服务

1
systemctl restart httpd

客户端访问 https://hello.com
如果无法访问可能是因为没有域名到IP的解析的原因,要么搭建一个 DNS 解析域名到 HTTP 服务器,要么添加一条 hosts

1
echo "http服务器IP hello.com" >> /etc/hosts

然后浏览器再此打开 https://hello.com 就可以看到如下页面了

这说明 SSL 已经成功添加到 HTTP 的服务器中了,之所以出现这个页面是因为使用的是自签证书,被识别为不安全网站了,但是和网页直接的交互已经是加密了的


以前虽然是用过 Apache 搭建过 http 服务的,但没有像这样一步一步的学习过来,每一步都知道在干什么
而且还又学习了一次自签 SSL 证书,并添加 SSL 证书到 HTTP 服务器中 < ( ̄︶ ̄)>