Web服务之五:基于openssl定义https服务器的配置

https会话建立的过程

   http与https都是基于TCP协议的,所以得先三次握手,确保对方的主机在线。三次握手成功之后,客户端和服务器端就可以建立SSL会话了。而建立SSL会话首先应该协商单向加密算法、对称算法、公钥加密算法,并选择双方都支持的算法,选择完成之后,Server发送自己的证书给客户端。客户端对证书验证完成之后如果发现没有问题,客户端会生成一个对称密钥(可能是随机的)并将其使用Server的公钥加密发送给服务器端,而Server将Client发送的对称密钥使用自己的私钥解密,接下来就可以使用对称密钥加密Client请求的内容并传送给客户端了,所以SSL会话就建立了。

  在三次握手建立完成之后进行协商SSL,这个SSL的建立与主机名无关,因为两台主机之间的通信靠的是IP和端口,因此两台主机通信没办法基于主机名作区分。这就意味着,若服务器只有一个IP地址,即若当前主机实现了基于域名的虚拟主机,那么它只能为一个虚拟主机提供SSL功能,即SSL会话仅能基于IP地址进行

 

https的实现

  • 安装SSL模块

  要想让Web服务器能够支持SSL的功能,第一步得安装SSL模块

  查看模块:

  可发现没有SSL模块,因此需要安装:

  生成的/etc/httpd/conf.d/ssl.conf会作为主配置文件的一部分,因此需要重启才能生效。

  一般来讲,SSL新增了端口,而只要涉及到新端口(套接字)的话,必须得重启或重新装载才能生效。

  /var/cache/mod_ssl:SSL会话的缓存数据

 

  • 提供CA

  首先CA自签证书,然后服务器生成一段密钥,把公钥发送给CA服务器,让CA实现签名。

  生成自签证书:

    生成私钥:

    修改默认配置:

 

      certs:生成的证书放置的目录;
      crl:证书吊销列表放置的目录

      new_certs_dir:新签的证书;

      index.txt:记录签署的证书及证书名称等索引信息;

      serial:序列号;

      之所以在/etc/pki/CA目录下,是因为生成的证书默认在此目录下,为了不修改目录,而且名称就叫cacert.pem,因此使用此目录。

      cacert.pem

      cakey.pem:私钥,在private目录下;

 

    生成自签证书

    创建文件:

  • Web Server服务器端,生成一对密钥,将公钥保证成证书签署请求发送给CA服务器

    注意:信息需要与CA保持一致,但hostname为需要使用证书的那一个虚拟主机的主机名。

  • CA服务器签署证书

  • 将Web Server服务器的证书复制至Web服务器

 

    删除CA服务器的server服务器的证书颁发请求,避免被窃取:

  • 配置Web服务器使用此证书

  备份配置文件:

  配置文件内容:

    <VirtualHost _default_:443>:监听在443端口的虚拟主机;若有多个IP地址,这个虚拟主机应该监听在某一特定地址上;

  修改如下:

    DocumentRoot:需要与对应的虚拟主机的DocumentRoot保持一致;

    SSLEngine:是否启用SSL功能,需要为on;

    SSLProtocol:支持的SSL协议,all -SSLv2表示不使用SSLv2,那就只有SSLv3或TLSv1了。    

    SSLCipherSuite:加密机制,加密套件,ALL所有的但不包括ADH,不使用SSLv2

    SSLCertificateFile:证书文件的位置;

    SSLCertificateKeyFile:私钥文件的位置;

  • Windows客户端测试

    出现上述提示是因为对于颁发这个证书的机构,我们客户端未表示信任

  因此需要将证书发送给Windows客户端(使用ftp传输工具即可),并命名为*.crt,双击安装即可。

    在浏览器中查看证书:

 

 

  需要再次强调的是,请求的URL名称(即主机名称)一定要与证书服务器的名称保持一致。此外,一个地址上只能建立一个虚拟主机。

 

posted @ 2019-03-23 16:41  LongMX  阅读(2281)  评论(0编辑  收藏  举报