搭建HTTP/HTTPS服务

1、建立httpd服务器(基于编译的方式进行),要求:

提供两个基于名称的虚拟主机:

(a)www1.itab.com,页面文件目录为/web/vhosts/www1;错误日志为/var/log/httpd/www1.err,访问日志为/var/log/httpd/www1.access;

(b)www2.itab.com,页面文件目录为/web/vhosts/www2;错误日志为/var/log/httpd/www2.err,访问日志为/var/log/httpd/www2.access;

(c)为两个虚拟主机建立各自的主页文件index.html,内容分别为其对应的主机名;

(d)通过www1.itab.com/server-status输出httpd工作状态相关信息,且只允许提供帐号密码才能访问(status:status);

(e) www1不允许192.168.1.0/24网络中的主机访问;

2、为上面的的第2个虚拟主机提供https服务,使得用户可以通过https安全的访问此web站点;

(1)要求使用证书认证,证书中要求使用的国家(CN)、州(HA)、城市(ZZ)和组织(iTab);

(2)设置部门为Ops,主机名为www2.itab.com,邮件为[email protected];

现在分别使用httpd-2.2和httpd-2.4搭建符合以上要求的HTTP/HTTPS服务。

httpd-2.2

(1) 使用yum安装httpd服务程序。

[[email protected] ~]# yum -y install httpd

(2) 要想使用虚拟主机,必须先注释掉中心主机的文档根路径(DocRoot)。

[[email protected] ~]# vim /etc/httpd/conf/httpd.conf

#DocumentRoot "/var/www/html"

(3) 在/etc/httpd/conf.d目录下创建vhost.conf文件,专门用于配置虚拟主机。

NameVirtualHost 192.168.10.128:80

<VirtualHost 192.168.10.128:80>    # 第一台虚拟主机配置
    ServerName www1.itab.com       # 第一台虚拟主机的主机名
    DocumentRoot "/web/vhosts/www1"        # 第一台虚拟主机的DocRoot
    ErrorLog logs/www1.err                 # 错误日志路径
    CustomLog logs/www1.access combined    # 访问日志路径
    <Directory "/web/vhosts/www1">         # 基于IP地址做访问控制
        Order allow,deny
        Deny from 192.168.1                # 不允许192.168.1.0/24网络中的主机访问
    </Directory>
    <Location /server-status>              # 第一台虚拟主机开启server-status工作状态输出功能
        SetHandler server-status
        AuthType Basic                     # 基于账号密码做控制
        AuthName "Enter your username and password."    # 认证提示
        AuthUserFile "/etc/httpd/.htpasswd"             # 存放账号密码的文件路径
        Require user status                # 只允许status用户登录
    </Location>
</VirtualHost>

<VirtualHost "192.168.10.128:80">          # 第二台虚拟主机配置
    ServerName www2.itab.com               # 第二台虚拟主机的主机名
    DocumentRoot "/web/vhosts/www2"        # 第二台虚拟主机的DocRoot
    ErrorLog logs/www2.err                 # 错误日志路径
    CustomLog logs/www2.access combined    # 访问日志路径
</VirtualHost>

(4) 创建虚拟主机的文档根目录,并为两个虚拟主机建立各自的主页文件index.html,内容分别为其对应的主机名。

[[email protected] ~]# mkdir -pv /web/vhosts/{www1,www2}
mkdir: created directory `/web‘
mkdir: created directory `/web/vhosts‘
mkdir: created directory `/web/vhosts/www1‘
mkdir: created directory `/web/vhosts/www2‘

[[email protected] ~]# cat /web/vhosts/www1/index.html 
<h1> www1.itab.com </h1>

[[email protected] ~]# cat /web/vhosts/www2/index.html 
<h1> www2.itab.com </h1>

(5) 设置站点主页面。

[[email protected] ~]# vim /etc/httpd/conf/httpd.conf
DirectoryIndex index.html

(6) 创建访问status页面的账号(status)和密码(status)。

[[email protected] ~]# htpasswd -cm /etc/httpd/.htpasswd status
New password: 
Re-type new password: 
Adding password for user status

(7) 检查语法错误,如果没有错误,则启动http服务。

[[email protected] ~]# httpd -t
Syntax OK
[[email protected] ~]# service httpd start
Starting httpd:                                            [  OK  ]

(8) 查看httpd是否已经监听在80端口。

[[email protected] ~]# ss -tnl | grep 80
LISTEN     0      128                      :::80                      :::*

(9) 测试。


9.1 测试status页面。

使用192.168.10.140的主机测试,如下。

[[email protected] ~]# elinks www1.itab.com/server-status

打开页面如下。

9.2 测试两个虚拟主机的页面。

同样使用192.168.10.140这台主机来测试,如下。

[[email protected] ~]# elinks www1.itab.com

访问www1.itab.com时,打开页面如下。

[[email protected] ~]# elinks www2.itab.com

访问www2.itab.com时,打开页面如下。

对于192.168.1.0/24网段的主机,则无法访问www1.itab.com,其打开页面如下。

(10) 现在为上面的的第2个虚拟主机提供https服务,使得用户可以通过https安全的访问此web站点。

为了方便,这里通过建立私有CA来提供服务器证书。CA主机和Webf服务器主机如下:

CA主机:192.168.10.140
Web服务器主机:192.168.10.128

10.1 在CA主机(192.168.10.128上)建立私有CA

① CA生成私钥。

[[email protected] ~]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)

② 生成自签证书。

[[email protected] ~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365
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]:CN
State or Province Name (full name) []:HA
Locality Name (eg, city) [Default City]:ZZ
Organization Name (eg, company) [Default Company Ltd]:iTab
Organizational Unit Name (eg, section) []:Ops
Common Name (eg, your name or your server‘s hostname) []:ca.itab.com
Email Address []:[email protected]

③ 为CA提供所需的目录及文件。

[[email protected] ~]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
[[email protected] ~]# touch /etc/pki/CA/{serial,index.txt}
[[email protected] ~]# echo 01 > /etc/pki/CA/serial

10.2 在Web服务器主机(192.168.10.128)上创建证书签署请求。

① Web服务器主机生成私钥。

[[email protected] ~]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)

② Web服务器生成证书签署请求。

[[email protected] ~]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365
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]:CN
State or Province Name (full name) []:HA
Locality Name (eg, city) [Default City]:ZZ
Organization Name (eg, company) [Default Company Ltd]:iTab
Organizational Unit Name (eg, section) []:Ops
Common Name (eg, your name or your server‘s hostname) []:www2.itab.com
Email Address []:[email protected]

Please enter the following ‘extra‘ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

③ 通过可靠方式将证书签署请求发送给CA主机。这里为了演示方便,所以直接通过scp命令传送。

[[email protected] ~]# scp /etc/httpd/ssl/httpd.csr [email protected]:/tmp/

10.3 在CA主机(192.168.10.140)上签署证书请求。


① CA主机为Web服务器签证。

[[email protected] ~]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: May 21 13:50:38 2017 GMT
            Not After : May 21 13:50:38 2018 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = HA
            organizationName          = iTab
            organizationalUnitName    = Ops
            commonName                = www2.itab.com
            emailAddress              = [email protected]
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                C9:0A:4A:B8:2C:67:8A:1C:68:D5:1E:F6:40:57:21:BD:48:75:D5:75
            X509v3 Authority Key Identifier: 
                keyid:81:F9:59:3E:F7:7C:8C:A4:1A:6B:7F:6F:9E:4F:8B:A6:18:A5:20:30

Certificate is to be certified until May 21 13:50:38 2018 GMT (365 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

② CA主机将已签署的证书通过可靠方式传送给该Webf服务器。这里同样使用scp命令。

[[email protected] ~]# scp /etc/pki/CA/certs/httpd.crt [email protected]:/etc/httpd/ssl/

(11) Web服务器在已经得到CA签署的证书了,现在开始配置HTTPS服务,首先安装mod_ssl模块。

[[email protected] ~]# yum install mod_ssl

查看ssl_module是否已经加载。

[[email protected] ~]# httpd -M | grep ssl_module
 ssl_module (shared)    # ssl模块已经加载
Syntax OK

(12) 修改/etc/httpd/conf.d/ssl.conf配置文件。

[[email protected] ~]# vim /etc/httpd/conf.d/ssl.conf

# 修改以下配置项

<VirtualHost 192.168.10.128:443>
DocumentRoot "/web/vhosts/www2"
ServerName www2.itab.com
SSLCertificateFile /etc/httpd/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key

检查语法错误。

[[email protected] ~]# httpd -t
Syntax OK

重载服务。

[[email protected] ~]# service httpd reload

查看是否监听在443端口。

[[email protected] ~]# ss -tnl | grep 443
LISTEN     0      128                      :::443                     :::*

(13) 使用Web服务器本主机测试。

[[email protected] ~]# openssl s_client -connect www2.itab.com:443 -CAfile /etc/pki/CA/cacert.pem 
CONNECTED(00000003)
......(中间省略)......
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: 379BE969583B315BC9C8C43F64107EE2CD9CB12668ECA26725D8749BA9CDABD2
    Session-ID-ctx: 
    Master-Key: FB5258D5C5FB3EF484831FC306B883EA84D106399CC5630A34169E7B2949FD45A9B90D025AB82EC34887A7C9D8E3F7E2
    Key-Arg   : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - 55 ba da 0d 93 a9 67 a4-46 1b 21 ab 6f a3 03 5d   U.....g.F.!.o..]
    0010 - 6e aa d8 23 25 8d 7d 8a-41 db 47 ea a9 3b fb 7c   n..#%.}.A.G..;.|
    0020 - 70 59 b2 a3 6c cd 7e 00-4e 8a 3e ef 7d 6b f4 68   pY..l.~.N.>.}k.h
    0030 - 59 0a 2d 6d a1 1b 36 84-62 7c 3f 51 5d 24 aa 90   Y.-m..6.b|?Q]$..
    0040 - a8 7f 0a a9 f7 a3 fa b2-a0 ea 30 ef 35 80 7d 13   ..........0.5.}.
    0050 - 66 8c d2 47 be b5 47 1f-64 90 e9 c7 ce 7e a6 6f   f..G..G.d....~.o
    0060 - 10 e5 ab 58 98 70 ab 14-07 ca 04 b0 c4 2f d8 f6   ...X.p......./..
    0070 - 70 52 85 f2 1c 93 13 ca-0c ef 7e b2 5a f3 f2 09   pR........~.Z...
    0080 - e3 fd e6 d1 01 18 4b 63-74 ce b9 9c c0 a5 2e 1e   ......Kct.......
    0090 - 8c 9a 7d 7f 35 69 b3 81-01 64 7a 9c 2c 61 24 07   ..}.5i...dz.,a$.
    00a0 - 29 69 af b8 19 a7 78 ff-2a 2e a5 8f fe 11 21 b0   )i....x.*.....!.
    00b0 - 86 78 fd b7 ae 55 3b 10-44 b4 81 25 02 40 0a c5   .x...U;.D..%[email protected]

    Start Time: 1491487607
    Timeout   : 300 (sec)
    Verify return code: 21 (unable to verify the first certificate)
---
GET /index.html HTTP/1.1    # 测试能否获取www2.itab.com的主页面资源
Host: www2.itab.com

HTTP/1.1 200 OK             # 获取成功
Date: Thu, 06 Apr 2017 14:06:57 GMT
Server: Apache/2.2.15 (CentOS)
Last-Modified: Thu, 06 Apr 2017 11:29:45 GMT
ETag: "4342e-19-54c7dd36ab98c"
Accept-Ranges: bytes
Content-Length: 25
Connection: close
Content-Type: text/html; charset=UTF-8

<h1> www2.itab.com </h1>
closed
[[email protected] ~]#

测试完毕,使用httpd-2.2搭建HTTP/HTTPS服务成功。接下来使用httpd-2.4搭建同样的HTTP/HTTPS服务。

httpd-2.4

httpd-2.4跟httpd-2.2不同在于任意目录下的页面只有显式授权才能被访问,因此,在配置虚拟主机访问控制时,如下所示。

[[email protected] ~]# cat /etc/httpd/conf.d/vhosts.conf

<VirtualHost 192.168.10.140:80>
    ServerName www1.itab.com
    DocumentRoot "/web/vhosts/www1"
    ErrorLog logs/www1.err
    CustomLog logs/www1.access combined
    <Location /server-status>
        SetHandler server-status
        AuthType Basic
        AuthName "Enter your username and password"
        AuthUserFile "/etc/httpd/.htpasswd"
        Require user status
    </Location>
    <Directory "/web/vhosts/www1">
        <RequireAll>        # 显示授权
            Require all granted
            Require not ip 192.168.10.128
        </RequireAll>
    </Directory>
</VirtualHost>

<VirtualHost 192.168.10.140:80>
    ServerName www2.itab.com
    DocumentRoot "/web/vhosts/www2"
    ErrorLog logs/www2.err
    CustomLog logs/www2.access combined
    <Directory "/web/vhosts/www2">
        <RequireAll>        # 显示授权
            Require all granted
            Require not ip 192.168.10.128
        </RequireAll>
    </Directory>
</VirtualHost>

还有在配置HTTPS时,也是需要显式授权才能被访问到,如下。

[[email protected] ~]# vim /etc/httpd/conf.d/ssl.conf

<VirtualHost 192.168.10.140:443>

DocumentRoot "/web/vhosts/www2"
ServerName www2.itab.com

<Directory "/web/vhosts/www2">    # 显式授权
    Require all granted
</Directory>

SSLCertificateFile /etc/httpd/ssl/httpd2.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key

</VirtualHost>

除此之外,其它配置同httpd-2.2,这里不再赘述。

时间: 2024-12-13 08:34:22

搭建HTTP/HTTPS服务的相关文章

如何搭建一个 HTTPS 服务端

关于 HTTPS 的基本原理大家都已经不再陌生,今天和大家说说如何搭建一个支持 HTTPS 的服务端. 服务端的 HTTPS HTTPS 已经几乎成为了当前互联网推荐的通信方式,它能最大化保证信息传输的安全,从去年苹果的强制 HTTPS ,到如今各大网站都支持了 HTTPS.它会越来越普及. 之前写过几篇关于 HTTPS 原理的文章,有用户留言希望了解一些如何在服务端搭建 HTTPS 服务的内容,这次就和大家聊聊这个话题. SSL 证书 搭建一个 HTTPS 站点,第一步要做的就是申请 SSL

使用openssl和nodejs搭建本地https服务

本地开发有时会遇到必须使用https服务的情况,这里介绍一下使用openssl自签名证书,并使用nodejs开启https服务. 1. 安装openssl 在http://slproweb.com/products/Win32OpenSSL.html可以找到openssl安装包,可以根据介绍下载对应版本安装,安装完成后将安装位置bin目录的文件路径添加到系统环境变量,此时就可以在全局使用openssl指令,打开命令行输入`openssl -version`查看openssl是否正确安装.安装完成

为苹果ATS和微信小程序搭建 Nginx + HTTPS 服务

昨天测试开发微信小程序,才发现微信也要求用HTTPS加密数据,想来是由于之前苹果的ATS审核政策的缘故吧,微信想在苹果上开放小程序必然也只能要求开发者必须使用HTTPS了,于是在服务器上测试安装Nginx+HTTPS服务. 安装 HTTPS 最麻烦的问题应该就是获取证书了,证书感觉种类也挺复杂的,有好几种,单域.泛域.多域...还有个种标准乱七八糟的感觉,而且收费很高,还是每年买的. 现在各个云服务商也都有提供各种基础功能的免费证书,但似乎很多只对单域免费,这里的单域是指每个二级域名都算是一个域

如何实现基于lamp搭建https服务

如何实现基于lamp搭建https服务 lamp:服务架构 httpd:接收用户的web请求:静态资源则直接响应:动态资源为php脚本,对此类资源的请求将交由php来运行: php:运行php程序: MariaDB:数据管理系统: (一):  安装其相关服务 CentOS 6: httpd, php, mysql-server, php-mysql # service httpd  start # service  mysqld  start CentOS 7: httpd, php, php-

基于openssl搭建https服务

多种应用层协议,例如http,ftp,smtp等都是明文协议,而这些服务在互联网通信中是不可或缺的,而有时安全显得特别重要,例如网购的时候,所以出现了ssl/tls的技术,那么现在就来实现以下基于ssl搭建https服务 查看当前httpd服务器是否安装了mod_ssl模块 httpd -M 一般在使用rpm包安装的时候,不会安装该模块,在编译安装httpd的时候,在./configure --enable-ssl编译该模块 如果单独使用rpm安装mod_ssl,可以看到安装这个模块生成的文件

使用Let&#39;s Encrypt搭建永久免费的HTTPS服务

1.概述1.1 HTTPS概述HTTPS即HTTP + TLS,TLS 是传输层加密协议,它的前身是 SSL 协议.我们知道HTTP协议是基于TCP的.简而言之HTTPS就是在TCP的基础上套一层TLS协议,对HTTP原来在TCP明文传输的内容进行加密,达到安全的目的. HTTP 和 TLS 在协议层的位置以及 TLS 协议的组成如下图: 目前很多网站都启用了HTTPS,这肯定是未来的趋势.而且一些场景必须使用HTTPS协议的,比如微信公众号的某些功能.小程序接入H5等等.详情参考:https:

Nginx + openssl 搭建https服务

近期忙着和第三方短信公司对接短信上行接口.给予https和digest认证方式进行数据的传输.digest认证由前端phper进行实现,我需要完成nginx+ssl实现https服务.ssl使用openssl自己进行制作. SSL原理: 给予SSL原理知识,在这里不再过多阐述.想详细了解,可以猛戳此链接进行查看:http://www.fenesky.com/blog/2014/07/19/how-https-works.html 1.首先要生成服务器的私钥:    运行时会提示输入密码,此密码用

tomcat搭建https服务

1.生成服务器站点证书 1) 生成密钥仓库 进入jdk的bin目录,如:D:\jdk1.6.0_16\bin 执行: D:\jdk1.6.0_16\bin\keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:\server.keystore -validity 36500 (参数简要说明:“D:\server.keystore”含义是将证书仓库文件的保存路径,证书仓库文件名称是server.keystore :“-validity 3

搭建 FTP 文件服务vsftpd

安装并启动 FTP 服务 安装 VSFTPD 使用 yum 安装 vsftpd: yum install vsftpd -y vsftpd 是在 Linux 上被广泛使用的 FTP 服务器,根据其[官网介绍][https://security.appspot.com/vsftpd.html],它可能是 UNIX-like 系统下最安全和快速的 FTP 服务器软件. 启动 VSFTPD 安装完成后,启动 FTP 服务: service vsftpd start 启动后,可以看到系统已经[监听了 2