整站启用 Https 的记录 – 热爱改变生活
我的GitHub GitHub |     登录
  • If you can't fly, then run; if you can't run, then walk; if you can't walk, then crawl
  • but whatever you do, you have to keep moving forward。
  • “你骗得了我有什么用,这是你自己的人生”
  • 曾有伤心之地,入梦如听 此歌

整站启用 Https 的记录

服务器相关 sinvader 5066℃ 0评论

起因

过了年回来,在访问自己的网站的时候,发现网址输入框的左边出现了 “不安全” 的字样

(类似于这样,但这个显然不是我的域名)

还以为网站出什么问题了,又访问了几个子域名下的站,也都是同样的问题,在 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_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 的记录

喜欢 (0)
发表我的评论
取消评论
表情

如需邮件形式接收回复,请注册登录

Hi,你需要填写昵称和邮箱~

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址