整站启用Https的记录

无简介

起因

过了年回来,在访问自己的网站的时候,发现网址输入框的左边出现了“不安全”的字样 (类似于这样,但这个显然不是我的域名) 还以为网站出什么问题了,又访问了几个子域名下的站,也都是同样的问题,在Chrome中查看了Security才发现,网站已经被标记为了不安全,如图 (图都是后来补的,这个网页在这里:谷歌放大招:2017年起将把HTTP网站标记为不安全) 它说:

Private User Data Input This page includes a password or credit card input over HTTP. A warning has been added the URL bar.

因为是Http,所以不安全了(原文) 那Http相对于Https来说,为什么不安全呢? 这里有一篇很不错的介绍,可以看一看 —(原文) 不想看原文的我来简单来介绍下: httpsandhttp 那么HTTPS就一定安全了么? 不一定,还有“中间人攻击”。参考这篇文章,我觉得写的很好。 所以,不管怎样,不为了安全,就是为了输入框上面的那“不安全”三个字也得把他改了。

启用HTTPS

这里是部分子域名:

域名

作用

是否启用HTTPS

sumile.cn

网站

启用

seafile.sumile.cn

私有云

启用

svn.sumile.cn

svn服务器

启用

git.sumile.cn

git服务器

启用

qr.sumile.cn

二维码页面

启用

其中sumile.cn是用nginx自带的FastCGI驱动的 seafile大概是这样的 svn是Apache的 gitblit是Java语言写的,应该是用的Tomcat qr是一个二维码页面,里面是一个静态页面 好了,这几个我常用的地址分别使用了Apache,Tomcat 和 FastCgi 我的服务器是使用nginx的,所有的HTTP服务都运行在nginx后面,nginx对外开启80端口接受请求,然后将请求按照域名转发给相应的服务 下面依次来说对这几项的配置:

Apache

SVN服务器我使用的是VisualSVN VisualSVN本身可以开启HTTPS,但是由于VisualSVN是运行在nginx后面的,所有的请求都会先经过nginx,然后再转发给VisualSVN,那转发的过程就没有必要开启https了,因为这个过程是在服务器自己内部完成的(只针对于nginx和VisualSVN在同一台服务器),所以我在服务器上将VisualSVN的HTTPS给关掉了,然后在nginx中对svn.sumile.cn配置了HTTPS,这样客户端的请求到了nginx之后会转发到VisualSVN,在请求的时候,其中前半段是HTTPS的,后半段是HTTP,保护了安全,又减少了nginx到VisualSVN之间HTTPS的验证步骤。 关闭VisualSVN的HTTPS:

在VisualSVN Server\conf目录下找到httpd.conf文件,打开文件找到
SSLEngine
将SSLEngine的值从on改为off

nginx配置https:

server {
listen 80;
server_name svn.sumile.cn;
rewrite ^ https://$http_host$request_uri? permanent; #强制将http重定向到https
}
server {
listen 443;
server_name svn.sumile.cn;
ssl on;
ssl_certificate C:/nginx/key/svn/server.crt;
ssl_certificate_key C:/nginx/key/svn/server.key;
#禁用不安全的SSLv1 2 3,只使用TLS
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:4433;
}
}

因为Apache是独立的服务不用也不能用FastCGI来解析,所以只要将请求转发过去就行了

Tomcat

然后看gitblit的配置 gitblit的配置位于gitblit\data文件夹下的defaults.properties文件中 其中server.httpPort规定了请求的端口,这里可以设定除系统端口以及那些常用的端口之外的其他端口,如:10111等 server.httpBindInterface = 127.0.0.1   这里是设置绑定的地址,设置为本机就行,因为会从nginx转发请求过来 然后nginx如同Apache一样配置就可以了,只是修改下proxy_pass 以及 server_name

FastCgi

使用php的都可以使用这个来解析 先来看一个配置的实例:

server {
listen 80;
server_name qr.sumile.cn;
rewrite ^ https://$http_host$request_uri? permanent; #强制将http重定向到https
}
server {
listen 443;
ssl on;
ssl_certificate C:/nginx/key/qr/server.crt;
ssl_certificate_key C:/nginx/key/qr/server.key;
#禁用不安全的SSLv1 2 3,只使用TLS
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

ssl\_prefer\_server\_ciphers on;
 
#RC4也是不安全的了,只能去掉
ssl\_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
 
server\_name  qr.sumile.cn;
error\_page   500 502 503 504  /50x.html;
location / {
    root   C:\\wamp\\www\\qr;
    index  index.html index.htm index.php;
}
location ~ \\.php$ {
  root           C:\\wamp\\www\\qr;
  fastcgi\_pass   127.0.0.1:9000;
  fastcgi\_index  index.php;
  fastcgi\_param  SCRIPT\_FILENAME  $document\_root$fastcgi\_script\_name;
  include        fastcgi\_params;
  proxy\_set\_header Host $host;
  proxy\_set\_header X-Real-IP $remote\_addr;
  proxy\_set\_header REMOTE-HOST $remote\_addr;
  proxy\_set\_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for;
}

}

这个实例可以应用与php的配置 其中root对应的是项目的根目录,fastcgin_pass一般不用改,FastCGI默认的端口号就是9000,80端口的请求过来之后会强制转到443端口,然后交给php执行

nginx conf的配置方式

nginx conf一共有两种方式来配置 第一种就是在nginx\conf目录下的nginx.conf文件中将所有的上面的代码分别粘贴进去,放在http标签里面,这种方法不推荐,如果配置很多的话非常不好修改查看。 第二种是通过Include方法将一个一个文件引入进来,每一个文件就是上面的一个server 引入的方式: nginx.conf中的http标签下面只要添加这样一句话:    include C:/nginx/conf/vhost/*.conf; 然后在conf下面新建一个vhost文件夹,新建一个后缀为conf的文件(文件名推荐使用域名,并用下划线替换点),将上面的代码段粘贴进去,比如上面FastCGI的代码段,新建一个qr_sumile_cn.conf文件,然后将整个代码粘贴进去,保存就好了。 保存完成后记得要重启nignx服务器的

SSL证书的申请

免费的证书签发机构也有不少,可以自己到谷歌搜索一下 我之前使用的StartSSL,教程在这里,大家可以试一试,但是最近我使用的时候发现以前能用的证书在Chrome更新后也显示为不安全了,还打了红叉叉,可能是这个机构不被信任了吧,教程在这—>StartSSL 免费 ssl 证书申请指南 发现上面的证书不能使用之后,我找了找开始使用腾讯的证书,地址在这里SSL证书 - 腾讯云 登陆之后你会看到这个界面 然后在这个界面,穷孩子选择免费的就好了 必填的填写了,其他的看心情以及需求吧 不会的后面都有详细说明,跟着做就好了 我用的是第一个,验证DNS,阿里云基本上秒验证,而文件需要创建带“.”号的,还是文件夹第一个字符就是“.”,可是微软粑粑不让啊 = =

遇到的问题

在使用FastCGI的过程中,你可能会遇到一些问题,比如批处理打开了nginx不能关闭这个批处理,关闭之后nginx也就随之关闭了,还有可能在打开nginx之后一段时间之内可以运行,但是过一会儿(我这里一般是两个小时)之后FastCGI就自动退出了,这些问题的解决方法我也会放到这里。 首先来制作nginx的开启/关闭批处理

@echo off
REM Windows 下无效
REM set PHP_FCGI_CHILDREN=5

REM 每个进程处理的最大请求数,或设置为 Windows 环境变量
set PHP_FCGI_MAX_REQUESTS=1000

echo Starting PHP FastCGI…
REM RunHiddenConsole C:/nginx/xxfpm/bin/xxfpm.exe C:/wamp/bin/php/php5.6.15/php-cgi.exe -b 127.0.0.1:9000 -c C:/wamp/bin/php/php5.6.15/php.ini
RunHiddenConsole C:/nginx/xxfpm/bin/xxfpm.exe “C:/wamp/bin/php/php5.6.15/php-cgi.exe -c C:/wamp/bin/php/php5.6.15/php.ini” -n 2 -i 127.0.0.1 -p 9000
echo Starting nginx…
RunHiddenConsole C:/nginx/nginx.exe -p C:/nginx-1.11.8

这个是start的代码,需要下载RunHidderConsole和xxfpm,网上搜一下,RunHidderConsole和这个批处理放在同一目录下就可以了,xxfpm也可以放在当前目录,如果是在当前目录那么注意修改

RunHiddenConsole C:/nginx/xxfpm/bin/xxfpm.exe

这一行的代码,最后修改代码里面的相应的php-cgi.exe和php.ini的位置

@echo off
echo Stopping nginx…
taskkill /F /IM nginx.exe > nul
cho Stopping xxfpm…
taskkill /F /IM xxfpm.exe > nul
echo Stopping PHP FastCGI…
taskkill /F /IM php-cgi.exe > nul
exit

以上两个文件自己起名字,后缀为“.bat”,如“start.bat” 这样,nginx就可以快捷的关闭和启动了,最后打开windows服务器的开始菜单,在里面找到“启动”,将start.bat的文件快捷方式拖进去就可以了,这样每次开机就会启动

-------------本文结束  感谢您的阅读-------------
下次一定