1.基本硬件准备,以windows server 2008 为例
//1台主机
//1个万维网域名
//域名通过ssl认证
//--服务器端安装以下--
//------nginx
//------wampserver
//----------Apache
//----------Mysql
//----------PHP
//------node
//---------express
//------pm2
1.以腾讯云为例 服务器搭建
1.主机与域名DNS解析
1.购买云主机,购买成功以后,如图:
2.购买域名,购买成功并认证,如图:
3.添加域名解析规则:
4.SSL 认证:
5.ssl 认证
认证成功,就可以下载证书配置自己服务器了。
不同服务器具体配置如下:
2. 笔者使用的是 Nginx 证书部署
2.1 获取证书
Nginx文件夹内获得SSL证书文件 1www.domain.com_bundle.crt 和私钥文件 2www.domain.com.key, 1_www.domain.com_bundle.crt 文件包括两段证书代码 “-----BEGIN CERTIFICATE-----”和“-----END CERTIFICATE-----”, 2_www.domain.com.key 文件包括一段私钥代码“-----BEGIN RSA PRIVATE KEY-----”和“-----END RSA PRIVATE KEY-----”。
2.2 证书安装
将域名 www.domain.com 的证书文件1www.domain.com_bundle.crt 、私钥文件2www.domain.com.key保存到同一个目录,例如/usr/local/nginx/conf目录下。 更新Nginx根目录下 conf/nginx.conf 文件如下:
server {
listen 443;
server_name www.domain.com; #填写绑定证书的域名
ssl on;
ssl_certificate 1_www.domain.com_bundle.crt;
ssl_certificate_key 2_www.domain.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
ssl_prefer_server_ciphers on;
location / {
root html; #站点目录
index index.html index.htm;
}
}
配置完成后,先用bin/nginx –t来测试下配置是否有误,正确无误的话,重启nginx。就可以使 https://www.domain.com 来访问了。
注:
配置文件参数 | 说明 |
listen 443 | SSL
访问端口号为
443
|
ssl on | 启用
SSL
功能
|
ssl_certificate | 证书文件 |
ssl_certificate_key | 私钥文件 |
ssl_protocols | 使用的协议 |
ssl_ciphers | 配置加密套件,写法遵循
openssl
标准
|
2.3 使用全站加密,http自动跳转https(可选)
对于用户不知道网站可以进行https访问的情况下,让服务器自动把http的请求重定向到https。 在服务器这边的话配置的话,可以在页面里加js脚本,也可以在后端程序里写重定向,当然也可以在web服务器来实现跳转。Nginx是支持rewrite的(只要在编译的时候没有去掉pcre) 在http的server里增加rewrite ^(.*) https://$host$1 permanent; 这样就可以实现80进来的请求,重定向为https了。
服务器配置
后台服务原理:
2.接下来配置服务器(以官方三木聊天室demo为例)
2.1 nginx 配置
server {
listen 443;
server_name www.lovmin.cn; #填写绑定证书的域名
ssl on;
ssl_certificate 1_www.lovmin.cn_bundle.crt;#下载好的证书文件
ssl_certificate_key 2_www.lovmin.cn.key;#下载好的证书文件
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
ssl_prefer_server_ciphers on;
location / {
proxy_pass localhost:5757;#node服务器地址与端口,因为同一台服务器故使用localhost
}
}
2.2 聊天室 server服务配置
注意:window server 配置文件需要手动 sdk.config 创建到 C:\qcloud\sdk.config
{
"serverHost": "www.zhangximufeng.com",//服务器域名
"authServerUrl": "http://10.141.19.17:8000/",//鉴证服务器地址(其实就是apache服务器地址)
"tunnelServerUrl": "https://ws.qcloud.com",//这个可以不改,信道服务器地址
"tunnelSignatureKey": "7fb7d1c161b7ca52d73cce0f1d833f9f5b5ec89",//随机码
"networkTimeout":30000//可不改
}
参考文档地址:
demo 源码
2.3 apache 服务器(鉴证服务器)配置及数据库设计
鉴证服务器
下载官方 会话服务器源码
会话服务器的源码
选择合适的方式部署 Wafer 服务后,按照部署类型:
· 自动部署 - 无需进行任何操作,会话服务器已经可以使用
· 镜像部署 - 按照下面步骤进行初始化工作
· 自行部署 - 按照下面步骤进行初始化工作
环境准备
确保机器中已安装 WAMP 环境。Linux server 可以选择安装LAMP 环境
代码部署
把本项目代码部署到 /opt/lampp/htdocs/mina_auth 目录中。
自动建表
执行下面命令创建运行时所需表:
/opt/lampp/bin/mysql -u root -p mypassword < /opt/lampp/htdocs/mina_auth/system/db/db.sql
初始化 appId 和 appSecret
登录到 MySql 后,手动插入配置到 cAuth 表中。
/opt/lampp/bin/mysql -u root -p root #登录本地mysql
use cAuth;
insert into cAppinfo set appid='Your appid',secret='Your secret';
测试服务可用性
curl -i -d'{"version":1,"componentName":"MA","interface":{"interfaceName":"qcloud.cam.id_skey","para":{"code":"001EWYiD1CVtKg0jXGjD1e6WiD1EWYiC","encrypt_data":"DNlJKYA0mJ3+RDXD/syznaLVLlaF4drGzeZvJFmjnEKtOAi37kAzC/1tCBr7KqGX8EpiLuWl8qt/kcH9a4LxDC5LQvlRLJlDogTEIwtlT/2jBWBuWwBC3vWFhm7Uuq5AOLZV+xG9UmWPKECDZX9UZpWcPRGQpiY8OOUNBAywVniJv6rC2eADFimdRR2qPiebdC3cry7QAvgvttt1Wk56Nb/1TmIbtJRTay5wb+6AY1H7AT1xPoB6XAXW3RqODXtRR0hZT1s/o5y209Vcc6EBal5QdsbJroXa020ZSD62EnlrOwgYnXy5c8SO+bzNAfRw59SVbI4wUNYz6kJb4NDn+y9dlASRjlt8Rau4xTQS+fZSi8HHUwkwE6RRak3qo8YZ7FWWbN2uwUKgQNlc/MfAfLRcfQw4XUqIdn9lxtRblaY="}}}' http://127.0.0.1/mina_auth/
按照源码 db.sql 文件 建立数据库
数据库设计
全局信息表 cAppInfo 保存会话服务所需要的配置项。
Field
Type
Null
key
Extra
appid
varchar(200)
NO
PRI
申请微信小程序开发者时,微信分配的 appId
secret
varchar(300)
NO
申请微信小程序开发者时,微信分配的 appSecret
login_duration
int(11)
NO
登录过期时间,单位为天,默认 30 天
session_duration
int(11)
NO
|
|
|
|
会话过期时间,单位为秒,默认为 2592000 秒(即30天) |
会话记录 cSessionInfo 保存每个会话的数据。
Field
Type
Null
key
Extra
id
int(11)
NO
MUL
uuid
varchar(100)
NO
会话 uuid
skey
varchar(100)
NO
会话 Skey
create_time
datetime
NO
last_visit_time
datetime
NO
open_id
varchar(100)
NO
MUL
session_key
varchar(100)
NO
微信服务端返回的 `session_key` 值
user_info
varchar(2048)
YES
已解密的用户数据
|
会话 ID(自增长)
|
|
|
会话创建时间,用于判断会话对应的 open_id 和 session_key 是否过期(是否超过
cAppInfo
表中字段
login_duration
配置的天数)
|
最近访问时间,用于判断会话是否过期(是否超过
cAppInfo
表中字段
session_duration
的配置的秒数)
|
微信服务端返回的
open_id
值
|
|
|
建数据库的详细 SQL 脚本请参考 db.sql
搭建会话管理服务器
服务器配置注意:
1、会话服务器源码中连接mysql数据库的用户名密码确保与数据库保持一致
2、sdk.config文件在不同server系统中位置不同,具体位置请阅读sdk源码config.js文件
3、sdk.config文件中不能有注释(后面会把字符串转对象)
小程序客户端配置
demo 地址:github.com/tencentyun/…
/**
* 小程序配置文件
* config.js
*/
// 此处主机域名修改成腾讯云解决方案分配的域名
var host = 'www.lovmin.com';
var config = {
// 下面的地址配合云端 Demo 工作
service: {
host,
// 登录地址,用于建立会话
loginUrl: `https://${host}/login`,
// 测试的请求地址,用于测试会话
requestUrl: `https://${host}/user`,
// 测试的信道服务地址
tunnelUrl: `https://${host}/tunnel`,
}
};
module.exports = config;
开发者设置