Web服务器概述

Web服务器也称WWW服务器,主要功能是提供网上信息浏览服务。WWW采用的是客户端/服务器端结构,其作用是整理和储存各种WWW资源,并响应客户端软件的请求,把客户所需的资源传送到客户端的机器上并显示出来。



HTTP协议简介

  HTTP(HyperText Transfer Prototcol,超文本传输协议)是Internet上应用最为广泛的一种网络协议,所有的www文件都必须遵循这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。

  HTTP事务:一个HTTP事务即客户端发出一个“HTTP请求”命令和服务器回复“HTTP响应”结果的过程。“HTTP请求”和“HTTP响应”均为格式化的数据块,它们被称作HTTP报文。

  HTTP方法:HTTP协议支持多个不同的请求命令,这些请求命令称作HTTP方法。每个HTTP请求报文都必须指定其请求方法,用于通知服务器进行什么样的响应动作。常见的HTTP方法有GET、HEAD、POST、PUT、DELETE、OPTIONS、TRACE等。

(1)OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法,也可利用向web服务器发送“*”的请求来测试服务器的功能性。

(2)HEAD:这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。

(3)GET:向特定的资源发送请求。

(4)POST:向指定的资源提交数据进行处理请求(比如提交表单等)。数据被包含在请求体中。这种请求可能会导致新的资源的建立或已有资源的修改。

(5)PUT:向指定资源位置上传其最新内容。

(6)DELETE:删除指定资源

(7)TRACE:回显服务器收到的请求。

  HTTP的响应码:HTTP服务器回应客户端状态码主要有一下几个:

    1xx: 信息性状态码,这一类状态码代表请求已被接受,需要继续处理。

     100:客户端应当继续发送请求。这个临时响应用来通知客户端部分请求已被接受请继续发送请求信息。

     101:服务器已经理解了客户端的请求,并将通知客户端采用不同的协议来完成这个请求。


    2xx: 成功状态码

     200:OK:请求已成功,请求所希望的响应头或数据体将随此响应返回。


    3xx: 重定向状态码

     301:永久重定向,也就是说被请求的资源已永久移动到新位置; Location响应首部的值仍为当前URL,因此为隐藏重定向;

     302:临时重定向,也就是说请求的资源现在临时从不同的URL响应请求;又称显式重定向, Location响应首部的值为新的URL喔。

     304:Not Modified如果客户端发送了一个带条件的GET请求且该请求已被允许,而文档中的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态吗。


     4xx: 客户端错误状态码

      404:Not Found请求失败,请求所希望得到的资源未被在服务器上发现,一般这个状态码被广泛应用于当前服务器不想揭示到底为何请求被拒绝或者没有其他适合的响应可用的情况下。


     5xx: 服务器端错误状态码

      500:Internal Server Error服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器的程序码出错时出现。

      502:Bad Gateway作为网关或者代理工作服务器尝试执行请求时从上游服务器接收到的无效响应。

      504:GatewayTimeout:作为网关或者代理服务器尝试执行请求时未能及时从上游服务器或者辅助服务器(比如DNS)收到响应。


  一次HTTP事务完成的过程:也就是一次web服务器的工作过程

  •       建立连接——接受或拒绝客户端连接请求;

  •    接收请求——通过网络读取HTTP请求报文;

  •    处理请求——解析请求报文并做出相应的动作;

  •    访问资源——访问请求报文中相关的资源;

  •    构建响应——使用正确的首部生成HTTP响应报文;

  •    发送响应——向客户端发送生成的响应报文;

  •    记录日志——当已经完成的HTTP事务记录进日志文件;

  目前的web服务器软件非常多,最流行的web服务器包含以下几种:

  Apache HTTP Servernginx(轻量级,更多新技术)、lighttpd(轻量级)等等。



Apache概述

Apache HTTP Server简称ApacheApache基金会的一个开源Web服务器,可以在大多数操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的web服务器端软件之一。

apache的服务脚本:/etc/rc.d/init.d/httpd

apache的运行目录:/etc/httpd

apache的配置文件:/etc/httpd/conf

主配置文件:httpd.conf

扩展配置:/etc/httpd/conf.d/*.conf

apache的端口:http80/tcp,

apache的网页文件目录:/var/www/html

apacheCGI目录:/var/www/cgi-bin/



Apache常见配置

修改配置文件的原则:

所有#号开头的都为注释部分,指令(参数)不区分字符大小写,但有个习惯:单词的首字母大写;指令的值(路径)很有可能区分大小写;有些指令可以重复使用多次哦。

[root@www conf]# grep "Section" httpd.conf
### Section 1: Global Environment                        #全局配置
### Section 2: 'Main' server configuration               #主服务器配置
### Section 3: Virtual Hosts                             #虚拟服务器配置

解析:这是查询配置文件的构成。

全局配置:对主服务器或虚拟机都有效,且有些功能是服务器自身工作属性;

主服务器配置:网站,主站属性;

虚拟主机配置:虚拟主机及属性定义;

注意:主服务器段和虚拟主机段不能同时启用。也就是说提供主服务器无法构建虚拟服务器只能有一个站点;构建虚拟服务器,虽然可以构建多个站点但是没有主服务器。


检查配置文件语法配置:

# service httpd configtest

或  # httpd -t

大多数配置修改后,使用service httpd reload即能生效;而修改了监听的地址和端口通常需要重启服务(service httpd restart)。


常见的配置:

1、配置监听的地址和端口

  Listen[IP:]PORT

  注:IP可以省略,若是省略表示当前主机上的所有IP

  Listen指令可以指定多个;但是不要冲突哦!

  Listen   80

  Listen   8080

  或:Listen 172.16.18.1:8080

      Listen 172.16.18.100:8080

[root@www conf]# vim httpd.conf
# prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
#
#Listen 12.34.56.78:80
Listen 80
Listen 172.16.18.1:8080                #配置监听到8080
############查看tcp监听地址################
root@www conf]# ss –tanl            
State      Recv-Q Send-Q               Local Address:Port                 Peer Address:Port
LISTEN     0      128                             :::48491                          :::* 
LISTEN     0      128                              *:51693                           *:* 
LISTEN     0      128                             :::111                            :::* 
LISTEN     0      128                              *:111                             *:* 
LISTEN     0      128                    172.16.18.1:8080                            *:* 
LISTEN     0      128                             :::80                             :::*


2、配置所选用的MPM的属性

MPM是多道处理模块,定义apache响应多个用户同时请求时候的响应模型(工作模型)。常见的有三个:worker|prefork|event

prefork: 一个主进程,然后根据设置以及连接情况生成相应的子进程数而这些子进程是实现一个进程响应一个请求;但是在性能上,开销过大。达不到我们的要求。如果连接数过多的话,会导致我们无法远程登陆,一定要等到连接数下降后才能连接,这也是最让人头痛的事情。

   主进程功能

      (1) 启动服务时绑定特权端口;

      (2) 回收子进程;

      (3) 读取分析主配置文件;

      (4) 监听用户请求派发子进程。

  worker:一个进程生成多个线程,一个线程响应一个请求(来自用户客户端的请求);

event:是基于事件驱动来定义的,在http2.2版本上默认为测试使用的。

查看现使用的mpm模块

[root@www ~]# httpd –l            #显示核心模块
Compiled in modules:              #直接编译进来的模块
  core.c                          #apache的核心模块
  prefork.c                       #现使用的模型
  http_core.c                     #http的核心模块
  mod_so.c                       #支持动态模块对象
[root@www ~]#

解析:这个命令只能显示核心模块,若想查看已经装载的共享模块可使用[root@www ~]# httpd  -t -DDUMP_MODULES 命令进行查看。

配置mpm模块

[root@www conf]# vim httpd.conf
# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
         #条件性指令,判断条件存在与否
StartServers       8         #启动几个空闲子进程
MinSpareServers    5         #最少空闲进程数
MaxSpareServers   20         #最大空闲进程数
ServerLimit      256         #最多允许并发接进来的同时处于活动状态的进程个数
MaxClients       256         #最多允许多少个客户端连接进来
MaxRequestsPerChild  4000    #一个进程最多可以处理多少请求

# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves

StartServers         4                  #启动几个服务线程
MaxClients         300                  #最多允许连进来的客户端的个数
MinSpareThreads     25                  #最少空闲线程数
MaxSpareThreads     75                  #最大空闲线程数
ThreadsPerChild     25                  #每个进程允许生成多少线程数
MaxRequestsPerChild  0               

启用worker类型的MPM模块,可编辑/etc/sysconfig/httpd配置文件,定义如下行:

HTTPD=/usr/sbin/httpd.worker         #将此行启用即可


3、配置服务器支持长连接或持久链接(keep-alived

长连接,指在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包,长连接多用于操作频繁,点对点的通讯,而且连接数不能太多的情况。

[root@www conf]# vim httpd.conf
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive Off  #默认关闭状态;开启KeepAlive On
#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 100  #一次持久连接内最多可以请求的资源
#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 15         #定义超时时间


4、配置加载的模块或共享对象的

  格式:LoadModule foo_module modules/mod_foo.so

  指定模块名称指定模块路径(相对路径,相对于ServerRoot而言的)

###########程序自带的模块,可参考路径#############
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so


5、配置站点根目录

[root@www conf]# vim httpd.conf
        DocumentRoot "路径"                 #网页存放目录
                  #容器类指令
                                #说明用户在访问这么页面资源时应该以什么样的权限进行访问
################或:########################
        DocumentRoot "路径"                 #网页存放目录
                   #也是容器类指令,通常用于定义访问方法
        
解析:容器类路径:用来配置一个路径下所能访问的网页页面文件所使用的方法,特性等等


6、配置页面文件访问属性

[root@www conf]# vim httpd.conf
        #容器类指令,定义访问属性
            Options
                Indexes:         #是否允许索引页面文件,如果不是下载站点建议关闭;
                FollowSynLinks:  #是否跟随软链接文件;
                SymLinksifOwnerMatch:    #跟随符号链接前提是属组为apache访问目录
                ExecCGI:  #是否允许执行CGI脚本;
                All:      #使用所有选项
                None:     #不使用任何选项
        


7、访问控制法则

  基于客户端(IP)访问控制:(只适用于apache2.4

  Order:定义allowdeny哪个为默认法则;写在后面的为默认法则:写在前面的指令没有明确定义的即受后面的指令控制;

Order allow,deny
Allow from all          #all表示所有客户端主机
#################例################
Deny from 172.16.18.1
Allow from 172.16.0.0/16
#测试显示:地址范围定义的越小越是最佳匹配

  基于用户访问控制

  首先使用directory封装一下明确说明那个目录下的内容作访问控制就可以了。

DocumentRoot "/var/www/html"

    Options None
    AllowOverride AuthConfig               #是否允许覆盖
    AuthName "Realm"                       #认证名称
    AuthType Basic                         #认证类型(摘要认证和基本认证(Basic))
    AuthUserFile /path/to/passwords        #用户账号文件
    Require jerry tom                      #定义哪些用户可以登录

  然后建立用户帐号文件

htpasswd -c -m /path/to/password_file USERNAME

    解析:-c创建新文件;若没有这个文件第一次创建才使用,以后若再使用会将原有文件覆盖

          -m 表示使用md5加密方式存放的

          -s使用SHA方式加密的

          -p明文存放密码,这种不安全

###############示例演练:#######################
[root@www cgi-bin]# htpasswd -c -m /etc/httpd/conf/.htpass jerry        #创建文件.htpass(隐藏文件)后要紧跟用户名
New password:               #输入用户密码
Re-type new password:         #再次输入
Adding password for user jerry 
[root@www cgi-bin]# cat /etc/httpd/conf/.htpass         #查看结果
jerry:$apr1$BBBECiJ2$rj8hI7Becv3ycuI4eQiN4.        
[root@www cgi-bin]# htpasswd -m /etc/httpd/conf/.htpass zhao   #添加用户,紧记不可再使用-c不然会被覆盖的
New password:
Re-type new password:
Adding password for user zhao
[root@www cgi-bin]# cat /etc/httpd/conf/.htpass         #结果显示
jerry:$apr1$BBBECiJ2$rj8hI7Becv3ycuI4eQiN4.
zhao:$apr1$ogTx3d8r$Kr4v9nhr7zjVb4LJV/uXs/
[root@www conf]# mkdir /var/www/html/downloads      #创建目录文件
[root@www conf]# vim httpd.conf                  #编辑配置文件

    Options Indexes
    AllowOverride AuthConfig
    AuthName "Only for employees."
    AuthType Basic
    AuthUserFile /etc/httpd/conf/.htpass
    Require valid-user             #允许所有用户登录

[root@www conf]# cp /etc/fstab /var/www/html/downloads/      #复制文件到此目录中
[root@www conf]# service httpd reload          #重新加载httpd
Reloading httpd:


8、让每个用户都有自己的网站:userdir


    #
    # UserDir is disabled by default since it can confirm the presence
    # of a username on the system (depending on home directory
    # permissions).
    #
    UserDir disabled                #默认是禁用此功能的;启用注释此项
    #
    # To enable requests to /~user/ to serve the user's public_html
    # directory, remove the "UserDir disabled" line above, and uncomment
    # the following line instead:
    #
    #UserDir public_html             #启用此项,也就是说每个用户在自己的家目录下建一个public_htm目录,然后在此目录下建立一个网页文件,并且让这个网页具有所有人访问权限。

[root@www conf]# setfacl -m u:apache:x /home/ username /        #让apache有访问家目录权限


站点访问:http://HOST/~username


9、定义默认主页面

DirectoryIndex          index.php index.jsp index.html   #自左而右依次寻找


10、配置日志功能

  apache的日志文件是通过自己来管理的,日志类型有两类:访问日志(格式需自定义)、错误日志。

   定义错误日志:

ErrorLog"/path/to/error_log_file"

   定义访问日志:

CustomLog/PATH/TO/CUSTEOM_LOG_FILE LOGFORMAT
###########/PATH/TO/CUSTEOM_LOG_FILE:定义路径信息############
###########LOGFORMAT:表示指定日志格式################

例如:

CustomLoglogs/access_log combined

常见日志格式:

#############这些格式信息在配置文件中都存在###############
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
##############系统默认使用第一种日志格式##############
[root@www logs]# tail access_log
172.16.254.58 - - [07/Aug/2013:14:17:52 +0800] "GET /~jerry HTTP/1.1" 404 284 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.15 Safari/537.36"

   解析:%h:客户端主机;%l:远程客户端登陆的主机地址(不登陆为空用‘—’表示);%u:认证时所使用的用户名(空用‘—’表示);%t:请求到达的时间;%r:请求报文的起始行; \”:转义字符,转移引号;%>s: 表示原始响应状态码;%b:响应报文的大小以字节为单位;%{Referer}i:定义从哪个超链接跳转过来的;%{User-Agent}i:用户代理。


11、设定默认字符集

AddDefaultCharset UTF-8   #尽量不要用默认的有时会出现乱码,要根据站点的内容设定字符集。

常见的字符集有:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等


12、脚本路径别名(定义CGI的执行目录)

CGI(CommonGateway Interface)HTTP服务器与你的或其它机器上的程序进行交谈的一种工具,叫做通用网关接口,其程序须运行在网络服务器上。用来解释处理来自表单的输入信息,并在服务器产生相应的处理,或将相应的信息反馈给浏览器。CGI程序使网页具有交互功能。

定义:

      格式:ScriptAlias /PATH/ /PATH/TO/SOMFEDIR/

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
#所有放在/var/www/cgi-bin/的文件都可以作为cgi的格式来执行,既开放了有定义了别名

  测试:

[root@www conf]# cd /var/www/cgi-bin/
[root@www cgi-bin]# vim test.sh
#!/bin/bash
#
cat << EOF
Content-Type: text/html             #明确指定格式类型
                            #明确指定下面是脚本
The hostname is: `/bin/hostname`.         #主机名
The time is: `date`.                      #当前时间
EOF # end of cgi script file [root@www cgi-bin]# bash -n test.sh #检查语法 [root@www cgi-bin]# chmod +x test.sh #赋予权限

13、虚拟主机

定义:一个web程序进程可以服务于多个站点

虚拟主机类型:

   基于端口的虚拟主机;基于IP的虚拟主机;基于主机名的虚拟主机。


注:虚拟主机和主服务器不能同时使用:关闭主服务器,注释主服务器的DocumentRoot即可;


   每个虚拟主机的定义:

            #指定主机所指定的套接字
    ServerName                   #指定主机名称
    DocumentRoot ""              #指定这个主机的站点路径

############这里还可以单独定义错误日志和访问日志等等


例:

(1) 基于端口的虚拟主机

172.16.18.1:80 , /web/host1/

172.16.18.1:8080, /web/host2/


###########确保监听两个端口##############
[root@www conf]# vim httpd.conf
Listen 80
Listen 8080
###########注释掉主服务器################
[root@www conf]# vim httpd.conf
#DocumentRoot "/var/www/html"
###########定义虚拟主机##################
[root@www conf]# vim httpd.conf
### Section 3: Virtual Hosts          #虚拟主机

    ServerName localhost
    DocumentRoot "/web/host1"


    ServerName www.a.com
    DocumentRoot "/web/host2"

###########创建目录文件##################
[root@www conf]# mkdir /web/host1 –pv
mkdir: created directory `/web'
mkdir: created directory `/web/host1'
[root@www conf]# mkdir /web/host2 -pv
mkdir: created directory `/web/host2'
[root@www conf]# vim /web/host1/index.html
[root@www conf]# vim /web/host2/index.html
###########检查配置文件##################
[root@www conf]# httpd -t
Syntax OK
###########重启服务######################
[root@www conf]# service httpd restart



(2)基于IP的虚拟主机

172.16.18.1:80 , /web/host1/

172.16.18.2:80, /web/host2/


############配置两个IP地址##############
[root@www conf]# ifconfig eth0:0 172.16.18.2/16            #简单配置
############编辑配置文件################

    ServerName localhost
    DocumentRoot "/web/host1"


    ServerName www.a.com
    DocumentRoot "/web/host2"

############重启测试###################
[root@www conf]# service httpd restart


(3)基于主机名的虚拟主机

首先说明在httpd-2.2版本上及其以前的版本上必须启动一个叫做 NameVirtualHost的指令才能完成工作,而在2.4版本以后就不用启动了。

172.16.18.1:80 , /web/host1/, www.a.com

172.16.18.1:80 , /web/host2/, www.b.org


############编辑启动指令###############
NameVirtualHost 172.16.18.1:80
############编辑虚拟文件属性###########

    ServerName www.a.com
    DocumentRoot "/web/host1"


    ServerName www.b.org
    DocumentRoot "/web/host2"

[root@www conf]# service httpd restart
###########编辑客户端hosts文件############
172.16.18.1    www.a.com
172.16.18.1    www.b.org


###########配置虚拟主机单独额外属性(指定当前虚拟主机有效)###########
#
    ServerAdmin [email protected]
    DocumentRoot /www/docs/dummy-host.example.com
    ServerName dummy-host.example.com
    ErrorLog logs/dummy-host.example.com-error_log              #定义错误日志
    CustomLog logs/dummy-host.example.com-access_log common     #定义访问日志
    
                     #定义访问控制容器机制
ScriptAlias /cgi-bin/                #定义CGI脚本的路径别名
    Alias                       #定义自己的路径别名
#



HTTPS配置

HTTPS是以安全为目标的HTTP通道,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSLL/TLS会话的建立仅能基于IP地址进行。http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443


客户端在使用HTTPS方式与web服务器通信时有以下几个步骤:

(1)客户使用https的URL访问web服务器,要求与web服务器建立SSL连接。

(2)web服务器收到客户端请求后,会将网站的证书信息传送一份给客户端。

(3)客户端的浏览器与web服务器开始协商SSL;连接的安全等级,也就是信息加密的等级。

(4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用的公钥将网站的会话密钥加密,并传送给网站。

(5)web服务器利用自己的私钥解密出会话密钥。

(6)web服务器利用会话密钥加密与客户端之间的通信。

创建过程展示:

1)、Apache实现HTTPS需要使用mod_ssl模块,无论采用哪种方式进行配置HTTPS必须首先安装此模块

##############安装模块#####################
[root@www ~]# yum -y install mod_ssl
##############查看安装模块后生成的文件###############      
[root@www ~]# rpm -ql mod_ssl               
/etc/httpd/conf.d/ssl.conf                         #被加载的配置文件
/usr/lib64/httpd/modules/mod_ssl.so
/var/cache/mod_ssl
/var/cache/mod_ssl/scache.dir
/var/cache/mod_ssl/scache.pag
/var/cache/mod_ssl/scache.sem
####这些/var/cache/mod_ssl/*文件就是为ssl会话的建立缓存的####

2)、自建CA

[root@www CA]# (umask 077; openssl genrsa -out private/cakey.pem 2048)
[root@www CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365
[root@www CA]# touch index.txt
[root@www CA]# echo 01 > serial

3)、为httpd创建私钥签署证书

[root@www CA]# cd /etc/httpd/conf
###############生成私钥文件################
[root@www conf]# (umask 077; openssl genrsa -out httpd.key 1024) 
###############证书申请####################
[root@www conf]# openssl req -new -key httpd.key -out httpd.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]:CN               #照旧
State or Province Name (full name) []:Henan
Locality Name (eg, city) [Default City]:Zhengzhou
Organization Name (eg, company) [Default Company Ltd]:Magedu
Organizational Unit Name (eg, section) []:Tech
Common Name (eg, your name or your server's hostname) []:www.pangge.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 []:
####################签署证书######################
[root@www conf]# openssl ca -in httpd.csr -out httpd.crt -days 365

4)、配置web的ssl功能

[root@www conf]# vim ssl.conf
               #所有虚拟主机443端口
# General setup for the virtual host, inherited from global configuration
DocumentRoot "/var/web/host1"             #这里为host1主机建立ssl虚拟主机会话
ServerName www.pangge.com                 #这里要保证和证书名称保持一致
#ServerName www.example.com:443
# Use separate log files for the SSL virtual host; note that LogLevel
# is not inherited from httpd.conf.
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
#   SSL Engine Switch:
#   Enable/Disable SSL for this virtual host.
SSLEngine on                               #是否启用ssl功能
……中间不做阐述…….
# certificate can be generated using the genkey(1) command.
SSLCertificateFile /etc/httpd/conf/httpd.crt            #指定证书文件路径
#   Server Private Key:
#   If the key is not combined with the certificate, use this
#   directive to point at the key file.  Keep in mind that if
#   you've both a RSA and a DSA private key you can configure
#   both in parallel (to also allow the use of DSA ciphers, etc.)
SSLCertificateKeyFile /etc/httpd/conf/httpd.key         #指定私钥文件路径
 ################保存重启服务######################
[root@www conf.d]# service httpd restart

5)、测试

  • 命令行测试

#############在命令行下可使用openssl s_client测试###############
[root@www conf.d]#openssl s_client -connect www.pangge.com:443 -CAfile /etc/pki/CA/cacert.pem
---                           #执行过命令最后一行
GET / HTTP/1.1                #指定请求方法,协议
Host:www.pangge.com           #指定主机名
HTTP/1.1 200 OK
Date: Wed, 07 Aug 2013 14:55:30 GMT
Server: Apache/2.2.15 (CentOS)
Last-Modified: Wed, 07 Aug 2013 10:23:31 GMT
ETag: "e0009-6-4e358eee559e1"
Accept-Ranges: bytes
Content-Length: 6
Connection: close
Content-Type: text/html; charset=UTF-8
host1                        #网页内容

  • 客户端浏览器测试

    下载一份证书

    将证书名称改为.crt的扩展名结尾安装证书

     安装成功登陆测试(这里千万不可使用www.pangge.com443登录哦,要使用https://www.pangge.com登录哦!!

这样,关于HTTPS的设置就基本完成了,关于SSL方面如有不懂可参考上篇博客《Linux加密认证全面解析》也可留言哦!j_0019.gif


至此关于web服务器的配置就基本告一段落,如有没有阐述到位或提及的部分请谅解或私信笔者j_0003.gif