任务描述:请采用 Apache 搭建企业网站。
配置 linux1 为 Apache2 服务器,使用 skills.lan 或 any.skills.lan(any 代表任意网址前缀,用 linux1.skills.lan 和 web.skills.lan测试)访问时,自动跳转到 www.skills.lan。禁止使用 IP 地址访问,默认首页文档/var/www/html/index.html 的内容为HelloApache
/etc/pki/tls/skills.crt 证书文件和/etc/pki/tls/skills.key私钥文件转换成含有证书和私钥的/etc/pki/tls/skills.pfx文件;
然后把/etc/pki/tls/skills.pfx转换为含有证书和私钥的/etc/pki/tls/skills.pem文件,
再从/etc/pki/tls/skills.pem文件中提取证书和私钥分别到/etc/pki/tls/apache.crt/etc/pki/tls/apache.key
客户端访问 Apache 服务时,必需有 ssl 证书。

主机名域名IP地址
linux1linux1.skills.lan10.10.220.11

1.安装apache服务器

执行yum install apache* mod_ssl -y安装

2.配置默认首页文档/var/www/html/index.html

在目录下创建文件index.html,根据题目修改文件内容。

[root@linux1 ~]# cat /var/www/html/index.html
HelloApache
[root@linux1 ~]#

修改完成后重启httpd服务,使用curl {IP地址} 可进行测试。

[root@linux1 ~]# curl 127.0.0.1
HelloApache
[root@linux1 ~]#

3.修改apache配置文件 配置为只能使用域名访问,禁止IP直接访问。

配置文件默认存放在/etc/httpd/conf/httpd.conf
使用vim修改如下文件
[root@linux1 ~]# vim /etc/httpd/conf/httpd.conf
关键配置如下 方法1:

<VirtualHost *:80>
#       serverName 10.10.220.11
#       serverAlias 10.10.220.11:*
                <Location />
                        Order Allow,Deny
                        Deny from all
                </Location>
</VirtualHost>


<VirtualHost 10.10.220.11:80>
        serverName skills.lan
        serverAlias *.skills.lan
        RewriteEngine On
        Redirect / https://www.skillstest.lan/
</VirtualHost>

<VirtualHost *:443>
        serverName skills.lan
        serverAlias *.skills.lan
        SSLCertificateFile /etc/pki/tls/apache.crt
        SSLCertificateKeyFile /etc/pki/tls/apache.key
        SSLEngine on
        SSLHonorCipherOrder on
        RewriteEngine On
        RewriteCond %{HTTP_HOST} ^((?!www).)+skills.lan*$ [NC] #访问非www开头的网页
        RewriteRule ^(.*)$ https://www.skills.lan/$1 [L,R=301] #重定向为www.skills.lan
        RewriteCond %{HTTP_HOST} ^([0-9]{1,3}[\.]){3}[0-9]{1,3} [NC] #直接IP访问的
        RewriteRule ^(.*)$ https://www.skills.lan$1 [L,R=301] 
        RewriteCond %{HTTP_HOST} ^skills.lan [NC] #直接访问skills.lan
        RewriteRule ^(.*)$ https://www.skills.lan$1 [L,R=301]
#       <Location />
#               Order Allow,Deny
#               Deny from all
#       </Location>
</VirtualHost>

方法二:

#无SSL配置
<VirtualHost *:80>
    ServerName skills.lan
    ServerAlias *.skills.lan
    DocumentRoot /var/www/html

    # 重写不符合规则的连接
    <IfModule mod_rewrite.c>
        RewriteEngine On
        #IP请求直接返回403
        RewriteCond %{HTTP_HOST} ^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$
        RewriteRule ^ - [F,L]
        #非www开头跳转
        RewriteCond %{HTTP_HOST} ^(?!www\.)[a-z0-9]+(\.[a-z0-9]+)+$ [NC]        #非www开头请求
        RewriteRule ^(.*)$ http://www.skills.lan/$1 [R=301,L]                   #重定向到www
    </IfModule>

    <Directory /var/www/html>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>

#SSL配置
<VirtualHost *:443>
    ServerName skills.lan
    ServerAlias *.skills.lan
    DocumentRoot /var/www/html
    #开启ssl引擎,并配置证书
    SSLEngine on
    SSLCertificateFile /etc/pki/tls/apache.crt
    SSLCertificateKeyFile /etc/pki/tls/apache.key
    # 客户端访问需要提供证书
    SSLVerifyClient require
    # 客户端证书签发的CA服务器证书
    SSLCACertificateFile /etc/pki/tls/CA/CA.crt
    # 重写不符合规则的连接
    <IfModule mod_rewrite.c>
        RewriteEngine On
        #IP请求直接返回403
        RewriteCond %{HTTP_HOST} ^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$
        RewriteRule ^ - [F,L]
        #非www开头跳转
        RewriteCond %{HTTP_HOST} ^(?!www\.)[a-z0-9]+(\.[a-z0-9]+)+$ [NC]        #非www开头请求
        RewriteRule ^(.*)$ https://www.skills.lan/$1 [R=301,L]                   #重定向到www
    </IfModule>

    <Directory /var/www/html>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>

4.证书转换

4.1 crt和key转pfx

skills.crt+skills.key = skills.pfx

openssl pkcs12 -export -out {输出pfx文件目录} -inkey {key密钥文件} -in {crt密钥对应的证书}
例如:

[root@linux1 html]# openssl pkcs12 -export -out /etc/pki/tls/skills.pfx -inkey /etc/pki/tls/skills.key -in /etc/pki/tls/skills.crt
Enter Export Password:
Verifying - Enter Export Password:

过程中需要输入导出密码 请牢记。

4.2 pfx转pem

openssl pkcs12 -in {pfx证书} -nodes -out {输出pem证书}
例如:

[root@linux1 tls]# openssl pkcs12 -in skills.pfx -nodes -out skills.pem
Enter Import Password:

转换过程中需要输入先前导出的密码。

4.3 pem转crt和key

4.3.1 pem转crt

openssl x509 -in {pem文件} -out {输出的crt文件}

[root@linux1 tls]# openssl x509 -in skills.pem -out apache.crt

4.3.2 pem转key

openssl rsa -in {pem文件} -out {输出的key文件}

[root@linux1 tls]# openssl rsa -in skills.pem -out apache.key

5.apache网页服务配置ssl证书访问。

使用yum install mod_ssl为apache安装ssl模块

[root@linux1 conf]# yum install mod_ssl

修改配置文件/etc/httpd/conf/httpd.conf
46.png

详见第三步。

6. 验证

模拟访问https://www.skills.lan

[root@linux1 ~]# curl -k https://10.10.220.11 --silent -H "Host:www.skills.lan"
HelloApache

模拟直接访问https://10.10.220.11,提示需要跳转到https://www.skills.lan/

[root@linux1 ~]# curl -k https://10.10.220.11
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="https://www.skills.lan/">here</a>.</p>
</body></html>
[root@linux1 ~]#

模拟访问https://test.skills.lan,提示需要跳转到https://www.skills.lan/

[root@linux1 ~]# curl -k https://10.10.220.11 --silent -H "Host:test.skills.lan"
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="https://www.skills.lan//">here</a>.</p>
</body></html>

模拟访问http://10.10.220.11,提示需要跳转到https://www.skills.lan/

[root@linux1 ~]# curl 10.10.220.11
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="https://www.skillstest.lan/">here</a>.</p>
</body></html>

模拟直接访问http://www.skills.lan,提示需要跳转到https://www.skills.lan/

[root@linux1 ~]# curl -k http://10.10.220.11 --silent -H "Host:www.skills.lan"
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="https://www.skillstest.lan/">here</a>.</p>
</body></html>