微信小程序不仅要求必须是HTTPS和WSS,还要求URL里不能有端口号。

一、使用Nginx足够了

常见的服务器有三种:

  • Nginx
  • IIS
  • Apache

这三种服务器都可以配置https,但是没必要全部知道,因为Nginx可以起到反向代理的作用,会配置Nginx就足够了。

二、关于HTTPS协议

HTTP协议默认端口号是80,HTTPS默认端口号是443。

HTTPS协议=HTTP+SSL,而SSL是基于公钥加密算法的。当我们访问一个使用了HTTPS的网站时,这个网站将它的公钥告知浏览器,浏览器在发送请求数据时会使用公钥对数据进行加密,这样一来就不怕有人监听数据包了,因为只有拥有私钥,才能够“理解”这些数据包。

对于普通的HTTP数据包,都是未加密的,很容易被监听。比如,当我们连上一个wifi后,我们的一切流量都用从路由器上经过,这个路由器接上抓包软件就能够看到一切,不加密的数据包简直相当于裸奔!所以,不要贪图便宜连接不知来源的wifi,更不要在不信任的wifi下填写密码表单,那样很容易泄露个人信息。而HTTPS协议能够大大解决这个问题。

对于一个现代化的网站,如果拥有自己的用户,那么就一定有使用HTTPS的必要。要全网站都是用HTTPS而不是部分链接使用HTTPS,因为访问HTTP链接的时候携带着跟访问HTTPS链接时一模一样的cookie,这就有可能泄露sessionId,而泄露sessionID跟泄露密码差不太多。

HTTPS并非百利而无一害,它对服务器性能提出了更高的要求。因为加密、解密的过程也是一个不可忽略的性能消耗。

三、获取SSL证书

获取SSL证书,最简单、最正确的姿势是使用腾讯云,申请SSL,这个过程是免费的,并且不需要任何命令行。

链接如下:

https://cloud.tencent.com/product/ssl

如果不想了解更多关于证书的内容,可以跳过下面。

证书结构

配置一个HTTPS服务所需要的证书包括几个部分:

  • Server Key(服务器私钥)
  • CSR(Certificate Signing Request)
  • CRT(X509 Certificate)

创建证书的基本流程是这样:

  • 生成自己的服务端私钥
  • 输入基本信息并用私钥签名生成CSR
  • 提交CSR给证书机构CA(免费或商业证书)签名生成CRT,或自己做CA签名生成CRT(自签名证书)。自签名证书和证书机构签名生成证书前两个步骤都是一样的,在这里统一说明一下。

自己生成证书(即公私钥)

自己生成证书最大的坏处就是,访问此网站时,浏览器会提示证书不受信任。

  1. # 1、首先,进入你想创建证书和私钥的目录,例如:
  2. cd /etc/nginx/
  3. # 2、创建服务器私钥,命令会让你输入一个口令:
  4. openssl genrsa -des3 -out server.key 1024
  5. 这句话生成server.key,这个文件长度为1024字节,这就是私钥,是服务器用来解码用户请求的宝贝。
  6. # 3、创建签名请求的证书(CSR):
  7. openssl req -new -key server.key -out server.csr
  8. # 4、在加载SSL支持的Nginx并使用上述私钥时除去必须的口令:
  9. cp server.key server.key.org
  10. openssl rsa -in server.key.org -out server.key
  11. # 5、最后标记证书使用上述私钥和CSR:
  12. openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.c

第3个命令是生成证书请求,会提示输入省份、城市、域名信息等,重要的是,email一定要是你的域名后缀的。这样就有一个 csr 文件了,提交给 ssl 提供商的时候就是这个 csr 文件。当然我这里并没有向证书提供商申请,而是在第4步自己签发了证书。

四、配置Nginx

在/etc/nginx/conf.d目录下新建https.conf

  1. upstream websocket{
  2. server weiyinfu.cn:8080;
  3. }
  4. upstream web{
  5. server weiyinfu.cn:8080;
  6. }
  7. server {
  8. listen 443;
  9. server_name weiyinfu.cn;
  10. ssl on;
  11. ssl_certificate /etc/nginx/weiyinfu.cn/Nginx/1_weiyinfu.cn_bundle.crt;
  12. ssl_certificate_key /etc/nginx/weiyinfu.cn/Nginx/2_weiyinfu.cn.key;
  13. ssl_session_timeout 5m;
  14. ssl_session_cache shared:SSL:50m;
  15. ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv2 SSLv3;
  16. ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
  17. ssl_prefer_server_ciphers on;
  18. location /wss {
  19. access_log /var/log/nginx/come-websocket.log;
  20. proxy_pass http://websocket/; # 代理到上面的地址去
  21. proxy_read_timeout 60s;
  22. proxy_set_header Host $host;
  23. proxy_set_header X-Real_IP $remote_addr;
  24. proxy_set_header X-Forwarded-for $remote_addr;
  25. proxy_http_version 1.1;
  26. proxy_set_header Upgrade $http_upgrade;
  27. proxy_set_header Connection 'Upgrade';
  28. }
  29. location / {
  30. #root html;
  31. #index testssl.html index.html index.htm;
  32. access_log /var/log/nginx/https-reverse.log;
  33. proxy_redirect off;
  34. proxy_set_header Host $host;
  35. proxy_set_header X-Real-IP $remote_addr;
  36. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  37. proxy_pass http://weiyinfu.cn/;
  38. }
  39. }

此文件包含两部分,第一部分配置wss,第二部分配置https

五、将http重定向到https

  1. server {
  2. listen 192.168.1.111:80;
  3. server_name test.com;
  4. rewrite ^(.*)$ https://$host$1 permanent;
  5. }

举例:将访问目录 \services\ 由http访问 重定向到 https (解决方法:nginx rewrite 加上 location 方式实现)

  1. location ~ /services/.*$ {
  2. if ($server_port ~ "^80$"){
  3. set $rule_0 1$rule_0;
  4. }
  5. if ($rule_0 = "1"){
  6. rewrite /(.*) https://IP地址/$1 permanent; break;
  7. }
  8. }

六、验证是否配置成功

nginx -t 命令测试一下

service nginx reload重新加载配置

观察/var/log/nginx查看日志

  1. /usr/local/nginx/sbin/nginx -t
  2. nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
  3. nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful (显示表示配置文件没有错误)
  4. service nginx reload (重新加载nginx服务)
  5. netstat -lan | grep 443 (查看443端口)

tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN (有看到这一行 就表示HTTPS已经在工作了)

参考资料

官网文档http://nginx.org/en/docs/http/websocket.htm

http://www.wxapp-union.com/portal.php?mod=view&aid=2105

http://www.cnblogs.com/yun007/p/3739182.html

关于HTTPS详尽的介绍

Nginx配置https和wss的更多相关文章

  1. 阿里云ssl证书NGINX配置https,wss

    server { listen 443; server_name server.sentiger.com; ssl on; root /home/wwwroot/Service/beta/public ...

  2. Nginx配置Https

    1.申请证书: https://console.qcloud.com/ssl?utm_source=yingyongbao&utm_medium=ssl&utm_campaign=qc ...

  3. 【转】Linux下nginx配置https协议访问的方法

    一.配置nginx支持https协议访问,需要在编译安装nginx的时候添加相应的模块--with-http_ssl_module 查看nginx编译参数:/usr/local/nginx/sbin/ ...

  4. nginx配置https双向验证(ca机构证书+自签证书)

    nginx配置https双向验证 服务端验证(ca机构证书) 客户端验证(服务器自签证书) 本文用的阿里云签发的免费证书实验,下载nginx安装ssl,文件夹有两个文件 这两个文件用于做服务器http ...

  5. Nginx 配置https 服务

    一.HTTPS 服务 为什么需要HTTPS? 原因:HTTP不安全 1.传输数据被中间人盗用.信息泄露 2.数据内容劫持.篡改 HTTPS协议的实现 对传输内容进行加密以及身份验证 HTTPS加密校验 ...

  6. nginx配置https转发到tomcat(使用自签名的证书)

    一.使用openSSL生成自签名的证书 1.生成RSA私钥 命令:openssl genrsa -des3 -out server.key 1024 说明:生成rsa私钥,des3算法,1024强度, ...

  7. RedHat 6.6下安装nginx,配置HTTPS

    1.安装依赖包 yum -y install pcre-devel openssl-devel zlib-devel 2.下载nginx安装包到服务器上,当前使用版本nginx-1.15.5.tar. ...

  8. nginx 配置https并自签名证书

    2016-10-28 转载请注明出处:http://daodaoliang.com/ 作者: daodaoliang 版本: V1.0.1 邮箱: daodaoliang@yeah.net 参考链接: ...

  9. [记录]NGINX配置HTTPS性能优化方案一则

    NGINX配置HTTPS性能优化方案一则: 1)HSTS的合理使用 2)会话恢复的合理使用 3)Ocsp stapling的合理使用 4)TLS协议的合理配置 5)False Start的合理使用 6 ...

随机推荐

  1. 使用Adt自带的工具进行Android自己主动化測试(三)

    在这个系列的上一篇文章中,我们介绍了MonkeyRunner,并提到假设依据坐标来编写自己主动化脚本的话存在着一定的局限性(点击文末"阅读原文"能够打开这篇文章查看).这篇文章将进 ...

  2. 在Spark上运行TopK程序

    1. scala程序如下 package com.cn.gao import org.apache.spark.SparkConf import org.apache.spark.SparkConte ...

  3. IOS学习笔记02---语言发展概述,计算机语言简介.

    IOS学习笔记02---语言发展概述,计算机语言简介. ------------------------------------------------------------------------ ...

  4. go语言基础之append扩容特点

    1.append扩容特点 示例: package main //必须有个main包 import "fmt" func main() { //如果超过原来的容量,通常以2倍容量扩容 ...

  5. 错误: 找不到或无法加载主类 Files\red5-server ,原因与解决办法

    因为你把 red5放到了 Program Files 下,而Program Files 中间有个空格,启动路径不允许有空格,换个没空格的路径就OK啦

  6. jQuery用面向对象的思想来编写验证表单的插件

    本人的重点是怎么构建一个简单有效可扩展的jQuery表单验证插件,这篇文章没有教你怎么用 validate plugin.我们的重点在学习一些jQuery,Javascript面向对象编程的知识. 下 ...

  7. js复制当前url地址解决浏览器兼容

    1.网上搜索的js复制链接代码,好像只能支持ie浏览器,其他浏览器不支持, 案例: var url=12; if(window.clipboardData){                   wi ...

  8. 无法执行 varchar 值到 varchar 的隐式转换,原因是,由于排序规则冲突,该值的排序规则未经解析。

    SELECT CONVERT(VARCHAR(100), 列名) FROM Table 提示错误: 无法执行 varchar 值到 varchar 的隐式转换,原因是,由于排序规则冲突,该值的排序规则 ...

  9. python 插入数据获取id

    python 插入数据获取id 学习了:https://blog.csdn.net/qq_37788558/article/details/78151972 commit之前获取 cursor.las ...

  10. NGUI诡异的drawCall

    看了很多关于NGUI drawCall的文章,见得比较多的一个观点是:一个 Atlas 对应一个Drawcall. 好奇心下做了个demo,两个panel中只用到一个Atlas,却产生了10个draw ...