zoukankan      html  css  js  c++  java
  • 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:仅获取头部信息
     
     
  • 相关阅读:
    论 设计模式及项目架构的作用
    Linux根据进程号查找其程序文件路径 及 lsof 命令使用
    Synchronized 原理
    Seata 中类SPI使用机制分析
    redisson spring boot starter 做分布式锁
    TTFB 时间过长
    ShardingSphere Hint模式 SpringBoot + Mybatis
    Core源码(十三)Stack和ConcurrentStack
    C#源码(十二) HashSet
    Core源码(十一)Queue
  • 原文地址:https://www.cnblogs.com/wxxjianchi/p/13546977.html
Copyright © 2011-2022 走看看