多种应用层协议,例如http,ftp,smtp等都是明文协议,而这些服务在互联网通信中是不可或缺的,而有时安全显得特别重要,例如网购的时候,所以出现了ssl/tls的技术,那么现在就来实现以下基于ssl搭建https服务

  1. 查看当前httpd服务器是否安装了mod_ssl模块

      httpd -M

    一般在使用rpm包安装的时候,不会安装该模块,在编译安装httpd的时候,在./configure --enable-ssl编译该模块

  2. 如果单独使用rpm安装mod_ssl,可以看到安装这个模块生成的文件

     wKiom1YmCDyTVPt7AACai68o0n0277.jpg

    首先 ,会在/etc/httpd/conf.d目录下生成一个ssl.conf,这就是用于配置ssl的配置文件,还会生成一个动态加载模块,用于实现该功能。

  3. 使用另一台虚拟机创建成为一个私有CA(过程不再赘述),本地切换至/etc/httpd目录下创建一个ssl目录,用于存放自己的私钥,以及由CA签署后等到的证书wKioL1YmCbiToTj5AAILHYXY9ZM870.jpg

    可以看到,私钥已经创建完毕,并生成了签署请求apache.csr,我们假设已经被CA 签署,并其人证书就保存在该目录下,名为apache.crt

    https的会话建立过程于http不同,因为https会话在tcp的三次握手之后要建立ssl会话,由于ssl会话是基于ip地址的,所以单个ip地址之上只能有一个https服务,如果使用了基于域名的虚拟主机,那么就只有其中一台,该台主机名应在生成证书签署请求的时候指定

  4. 编辑/etc/httpd/conf.d/ssl.conf文件

    该文件中需要特别注意的:

    <VirtualHost _default_:443>,这一项应该修改为我们提供https服务的主机名,例如

                       <VirtualHost www.abc.com:443>

  5.  
wKioL1YmC6zxMZuzAAA0wS3q0Pc446.jpg

   启用这两项,DocumentRoot,应该和使用http访问相同网站时一致

           ServerName,定义主机名

   wKioL1YmDEGAqGvWAAA4mn0B5pg231.jpg

  注意,https的错误日志定义与http一致,访问日志是使用Transferlog指令,然后定义访问日志格式时仍使用Customlog定义

   wKiom1YmDK_S0GLlAAAzfhri7f0300.jpg

   要使用ssl功能,SSLEngine 必须为on

   wKiom1YmDPSCU1uUAAEDboLxPkw917.jpg

  将证书以及私钥文件的路径修改为正在使用的,一般放在服务的配置文件目录下就可以,例如此处就是/etc/httpd/ssl目录下的两个文件

同时注意主配置文件中使用http访问该主机时的目录访问配置<Directory>,如果只是提供https服务,可在该文件中直接定义

启动httpd服务,查看443端口是否已经监听,可将CA自签署证书导入浏览器进行测试。