• 因为Windows XP系统不支持SNI,导致HTTPS请求总是返回第一个域名的证书,从而导致出现证书错误,这里有几种解决方法:

     

    QQ截图20140703090753

     

    事情的起因是这样的: 我制作了一些新的应用,购买了新的SSL证书并使用了新的子域名,同时用于客户端通讯和WEB访问,而旧域名也是一些软件必须的,且由于数据库连接的限制,使用了同一个IP地址,但是使用Windows XP访问时,旧域名会遇到证书错误。

     

    QQ截图20140703091353QQ截图20140703091608

    两个域名 其中一个是自签证书(客户端通讯用),一个是新买的证书(只能一个域名),而两个域名在XP下都返回了自签证书,不受信任了。

     

     

     

    第一种方法(如果是土豪的话): 买一个通配符证书

    第二种方法(不能算是完美解决):

    现有两个域名和两个证书,passport.eqoe.cn和secure.eqoe.cn, sec.pem 和 pass.pem,XP下默认返回的是pass.pem证书。

    那么我们编辑secure.eqoe.cn的配置文件:

    (仅关键部分)

    listen 80;
    server_name secure.eqoe.cn;
    root /home/wwwroot/secure.jump;
    ssl_certificate /disk/ssl/sec.crt;
    ssl_certificate_key /disk/ssl/sec.key;
    
    rewrite ^(.*)  index.php?path=$1 ;
    

    这样就把HTTP请求全部重写到了secure.jump目录下的index.php

    那么我们写一个index.php来进行跳转

    <?php
    $agent = $_SERVER['HTTP_USER_AGENT'];
    if (eregi('win', $agent) &amp;&amp; eregi('nt 5.1', $agent))
    {
    header("location:https://secure.eoqe.cn:444".$_GET['path']);  //将XP系统跳转到secure.eqoe.cn的444端口
    }else{
    header("location:https://secure.eoqe.cn".$_GET['path']);  //其他系统跳转到默认的HTTPS端口
    }
    ?>
    

    然后再新建一个nginx的配置文件,同时监听443和444端口。

    (仅关键部分)

    listen 443;
    listen 444;
    server_name secure.eqoe.cn;
    root  /home/wwwroot/secure.eqoe.cn;
    ssl on;
    ssl_certificate /disk/ssl/sec.crt;
    ssl_certificate_key /disk/ssl/sec.key;
    

    这样就为443和444端口开启SSL,并且对应的目录是secure.eqoe.cn,两端口内容相同,只需要将页面放到这里就可以了。

    采用不同的端口就可以避免证书问题了,且还会根据系统自动跳转,如果是XP系统则跳转到444端口,客户端访问默认用444就可以了。443端口用于非XP系统的网页访问,以保持URL的美观性以及Google的收录。 QQ截图20140703093725QQ截图20140703093758

    算是用了个小技巧使XP正常访问吧,不能算是完全解决了,想完全解决,掏钱买通配证书吧,哈哈。