httpd的https实现

https:http over ssl

SSL会话的简化过程

(1) 客户端发送可供选择的加密方式,并向服务器请求证书
(2) 服务器端发送证书以及选定的加密方式给客户端
(3) 客户端取得证书并进行证书验证
  如果信任给其发证书的CA
  (a) 验证证书来源的合法性;用CA的公钥解密证书上数字签名
  (b) 验证证书的内容的合法性:完整性验证
  (c) 检查证书的有效期限
  (d) 检查证书是否被吊销
  (e) 证书中拥有者的名字,与访问的目标主机要一致
(4) 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,
完成密钥交换
(5) 服务用此密钥加密用户请求的资源,响应给客户端
注意:SSL是基于IP地址实现,单IP的主机仅可以使用一个https虚拟主机

实现https

(1) 为服务器申请数字证书
  测试:通过私建CA发证书
  (a) 创建私有CA
  (b) 在服务器创建证书签署请求
  (c) CA签证
  商用环境:只需要生成证书签署请求,向正规CA申请后,导入服务器配置文件指定路径即可。
(2) 配置httpd支持使用ssl,及使用的证书
yum -y install mod_ssl
配置文件:/etc/httpd/conf.d/ssl.conf。
此配置文件内容如下,定义了一个虚拟主机,支持ssl实现https。其他的配置都是继承了我们之前配置的common.conf,例如documentroot。此时我们只需要重启服务就可以通过https访问apache了。
sed -i.bak -e '/^$/d' -e '/^[#].*/d' /etc/httpd/conf.d/ssl.conf
more /etc/httpd/conf.d/ssl.conf
  Listen 443 https
  SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
  SSLSessionCache         shmcb:/run/httpd/sslcache(512000)
  SSLSessionCacheTimeout  300
  SSLRandomSeed startup file:/dev/urandom  256
  SSLRandomSeed connect builtin
  SSLCryptoDevice builtin
  <VirtualHost _default_:443>
    ErrorLog logs/ssl_error_log
    TransferLog logs/ssl_access_log
    LogLevel warn
    SSLEngine on
    SSLProtocol all -SSLv2 -SSLv3
    SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA
    SSLCertificateFile /etc/pki/tls/certs/localhost.crt   ##证书文件路径可使用rpm -q --scripts mod_ssl查看,是如何生成的
    SSLCertificateKeyFile /etc/pki/tls/private/localhost.key ###私钥文件路径
    <Files ~ "\.(cgi|shtml|phtml|php3?)$">
        SSLOptions +StdEnvVars
    </Files>
    <Directory "/var/www/cgi-bin">
        SSLOptions +StdEnvVars
    </Directory>
    BrowserMatch "MSIE [2-5]" \
           nokeepalive ssl-unclean-shutdown \
           downgrade-1.0 force-response-1.0
    CustomLog logs/ssl_request_log \
            "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
  </VirtualHost>    

访问如下

http重定向https

通过重定向可以将http请求转发至https的URL
实现方法
Redirect [status] URL-path URL
  status状态:
    Permanent: 返回永久重定向状态码 301
    Temp:返回临时重定向状态码302. 此为默认值
示例:
Redirect temp / https://www.magedu.com/

实验一:实现再访问/var/www/html时重定向至https://ssltest.com

此配置为全新配置和上边无关

/etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/html"
redirect temp / https://www.ssltest.com

报错如下:再虚拟主机中使用重定向不会导致此问题。直接在/etc/httpd/conf/httpd.conf中使用会在成重定向的环路

解决方法如下


/etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/html"
#redirect temp / https://www.ssltest.com##不使用此方法
RewriteEngine onRewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=302]

curl命令
  -k:Allow connections to SSL sites without certs,允许不适用证书连接https站点
  -L:curl默认只向server发送一次请求,使用重定向时在返回重定向地址后就不会在向重定向后的地址发送请求了。因此使用此选项,如果有3xx响应码,重新发请求到新位置
    
  -I:仅获取头部信息
 
 

posted on 2020-08-22 20:34  HowOldAreYou  阅读(680)  评论(0编辑  收藏  举报

导航