起因
过了年回来,在访问自己的网站的时候,发现网址输入框的左边出现了 “不安全” 的字样
(类似于这样,但这个显然不是我的域名)
还以为网站出什么问题了,又访问了几个子域名下的站,也都是同样的问题,在 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 来说,为什么不安全呢?
这里有一篇很不错的介绍,可以看一看 —(原文)
不想看原文的我来简单来介绍下:
那么 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_hostrequest_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_hostrequest_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_FILENAMEdocument_rootfastcgi_script_name; include fastcgi_params; proxy_set_header Hosthost; proxy_set_header X-Real-IP remote_addr; proxy_set_header REMOTE-HOSTremote_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 的文件快捷方式拖进去就可以了,这样每次开机就会启动
转载请注明:热爱改变生活.cn » 整站启用 Https 的记录
本博客只要没有注明“转”,那么均为原创。 转载请注明链接:sumile.cn » 整站启用 Https 的记录