• Windows上为Apache配置HTTPS


    Windows上为Apache配置HTTPS

     

    转 https://www.cnblogs.com/tianzijiaozi/p/7582671.html
     

    1. 安装OpenSSL:

    Windows下安装的wamp64中的Apache内置的OpenSSL是32位的,因此如果服务器主机之前没有额外安装过OpenSSL的话,需要先安装64位OpenSSL,安装地址如下:

    http://slproweb.com/products/Win32OpenSSL.html

    选择Win64 OpenSSL最新版本号的Light即可,安装时有一步需要勾选"Copy DLLs to Windows System directory"

    参考:https://stackoverflow.com/questions/40017498/cannot-load-modules-mod-ssl-so-into-server

    注:本节可以解决错误日志中出现的问题:Cannot load modules/mod_ssl.so into server: The operating system cannot run %1.

    2. 证书的申请或生成:

    事实上SSL证书是可以自己给自己颁发的,如果只是测试HTTPS下的一些问题,完全可以自己自建Root CA。具体可参考:

    http://www.barretlee.com/blog/2016/04/24/detail-about-ca-and-certs/

    但是阿里云有免费证书,因此上面的东西我也没试过。

    以阿里云为例,通过域名可以免费申请到证书,包含四个文件:

    并有如下安装指导:

     

    3. 安装证书与常见问题:

    配置conf/httpd.conf:

    找到如下行并去掉#

    #LoadModule ssl_module modules/mod_ssl.so

    # Include conf/extra/httpd-ssl.conf

    另外,要确认以下两行至少有一行是去掉#的:

    LoadModule socache_dbm_module modules/mod_socache_dbm.so

    LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

    配置conf/extra/httpd-ssl.conf

    需要修改的关键行:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    Listen 443
     
    SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4
     
    SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4
      
    SSLHonorCipherOrder on
      
    SSLProtocol TLSv1 +TLSv1.1 +TLSv1.2
     
    SSLProxyProtocol all -SSLv3
      
    SSLPassPhraseDialog  builtin
      
    SSLSessionCache  dbm:d:/wamp64/bin/apache/apache2.4.23/logs/ssl_scache"
     
    #SSLSessionCache "shmcb:d:/wamp64/bin/apache/apache2.4.23/logs/ssl_scache(512000)"
     
    SSLSessionCacheTimeout  300
      
    <VirtualHost _default_:443>
      
    DocumentRoot "d:/wamp64/www"
    ServerName tryservice.*******.com:443
    #ServerAdmin admin@tryservice.*******.com
    ErrorLog "d:/wamp64/logs/apache/apache_error.log"
    TransferLog "d:/wamp64/logs/apache/access.log"
      
    SSLEngine on
      
    SSLCertificateFile "d:/wamp64/cert/tryservice/public.pem"
    SSLCertificateKeyFile "d:/wamp64/cert/tryservice/214************.key"
    SSLCertificateChainFile "d:/wamp64/cert/tryservice/chain.pem"
     
    <FilesMatch ".(cgi|shtml|phtml|php)$">
        SSLOptions +StdEnvVars
    </FilesMatch>
    ##
    <Directory "d:/wamp64/bin/apache/apache2.4.23/cgi-bin">
        SSLOptions +StdEnvVars
    </Directory>
    ##
      
    BrowserMatch "MSIE [2-5]"
             nokeepalive ssl-unclean-shutdown
             downgrade-1.0 force-response-1.0
      
    CustomLog "d:/wamp64/logs/apache/ssl_request.log"
              "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x "%r" %b"
     
    </VirtualHost>                                

      

    注意: 

    SSLSessionCache 二者取一即可,与httpd.conf中一致,如果一个导致重启Apache失败,可以试试另一个;

    涉及到日志位置、证书位置,尽量使用物理路径(要加引号),使用相对位置很容易错误;

    DocumentRoot, ServerName, ServerAdmin,一般来说应该与httpd.conf一致,但是要灵活处理,与证书的域名以及该域名对应网站的根目录对应起来。

    4. 确认80端口与443端口没有被占用:

    命令行输入命令:

    netstat -aon|findstr "80"

    得到输出:TCP    127.0.0.1:80        0.0.0.0:0              LISTENING      2448

    说明80端口被进程号为2448的进程占用。同理可找到443是否被进程占用。

    输入命令:

    tasklist|findstr "2448"

    可以查看该进程的具体信息,如果太多找不到,可以去任务管理器的进程选项卡找到该进程。若被一般进程占用可直接结束进程接触占用。若是SYSTEM占用,请参考以下解决方式。

    80端口如果被SYSTEM占用,一般来说原因是开启了IIS服务,把默认网站删除或者更改端口即可解除占用;443端口被SYSTEM占用,打开任务管理器,在服务选项卡中找到RemoteAccess,停止服务即可解除占用(注意等正常启动Apache后再手动启动服务)。

     

    注:本节可以解决错误日志中出现问题:

    (OS 10013)以一种访问权限不允许的方式做了一个访问套接字的尝试。 : AH00072: make_sock: could not bind to address 127.0.0.1:80

    (OS 10013)以一种访问权限不允许的方式做了一个访问套接字的尝试。 : AH00072: make_sock: could not bind to address 127.0.0.1:443

    5. 重启Apache:

    此时重启Apache,一般来说可以正常启动了。如果仍然无法启动,在任务管理器中的服务选项卡中找到以下两个服务:wampmysqld64, wampapache64

     

    若是wampmysqld64没有运行,一般来说是因为服务器的MySQL服务在运行占用,在服务选项卡中找到MySQL服务停止,再重启Apache即可;

    若是wampapache64没有运行,说明配置文件仍然有问题,首先停止Apache服务,在目录 ” D:wamp64inapacheapache2.4.23in” 中打开命令行,运行httpd命令,即可查看系统错误日志,针对问题解决。

    6. 虚拟服务器的SSL配置:

    配置conf/extra/httpd-vhosts.conf

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <VirtualHost *:80>
    ServerName tryservice.*******.com
    <Proxy *>
    Order deny,allow
    Allow from all
    </Proxy>
    ProxyPass / http://127.0.0.1:4050/
    ProxyPassReverse / http://127.0.0.1:4050/
    </VirtualHost>
      
    <VirtualHost *:443>
    ServerName tryservice.*******.com
    SSLEngine on
    SSLProxyEngine on
    SSLCertificateFile "d:/wamp64/cert/tryservice/public.pem"
    SSLCertificateKeyFile "d:/wamp64/cert/tryservice/214************.key"
    ProxyRequests Off
    <Proxy *>
    Order deny,allow
    Allow from all
    </Proxy>
    ProxyPass / http://127.0.0.1:4050/
    ProxyPassReverse / http://127.0.0.1:4050/
    </VirtualHost>

      


    虚拟服务器的SSL配置,要根据上面的*80加上后面的*443,同样注意域名与其证书一一对应。 

    7. 在同一服务器上为多个域名部署不同的证书:

    配置conf/extra/httpd-ssl.conf

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Listen 443
     
    ##不需要更改
      
    <VirtualHost _default_:443>
     
    ##不需要更改
     
    </VirtualHost>                                
      
    #需要增加的域名配置:
    <VirtualHost *:443>
      
    #   General setup for the virtual host
    DocumentRoot "d:/wamp64/www2"
    ServerName trydoctor.*******.com:443
    #ServerAdmin admin@tryservice.*******.com
    ErrorLog "d:/wamp64/logs/apache/apache_error.log"
    TransferLog "d:/wamp64/logs/apache/access.log"
      
    SSLEngine on
      
    SSLCertificateFile "d:/wamp64/cert/trydoctor/public.pem"
    SSLCertificateKeyFile "d:/wamp64/cert/trydoctor/214************.key"
    SSLCertificateChainFile "d:/wamp64/cert/trydoctor/chain.pem"
      
    <FilesMatch ".(cgi|shtml|phtml|php)$">
        SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory "d:/wamp64/bin/apache/apache2.4.23/cgi-bin">
        SSLOptions +StdEnvVars
    </Directory>
      
    BrowserMatch "MSIE [2-5]" 
             nokeepalive ssl-unclean-shutdown
             downgrade-1.0 force-response-1.0
      
    CustomLog "d:/wamp64/logs/apache/ssl_request.log" 
              "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x "%r" %b"
      
    </VirtualHost>                                

      

  • 相关阅读:
    Jquery 的offset与position方法
    HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth之完全详解
    js中对日期进行加减
    EditPlus 换行
    constructor属性,valueOf(),toSTring
    浅谈C#增加that关键字
    ASP.NET Global.ascx 事件大全
    Javascript:scrollWidth,clientWidth,offsetWidth的区别
    jquery val() 返回值怎么转换成 javascript 日期类型
    微软宣布Entity Framework 5的性能有了显著提升
  • 原文地址:https://www.cnblogs.com/it-tsz/p/10753213.html
Copyright © 2020-2023  润新知