1,vapor自身也可以配置https
但是我没有成功
2,Vapor的SSL配置可以通过nginx来完成的
3,Vapor的SSL配置也可以通过Apache2来完成
4, vapor服务器的配置及使用 //www.greatytc.com/p/7ee9f9ac1443
1,硬性需求
1,服务器
2,域名
3,SSL证书
以上三样都是阿里云的,服务器ubuntu linux 16.04系统。尽量都是一个地方的,能省一些事,这些东西的申请,都有教程,域名必须有,且必须实名认证,因为SSL证书的申请要域名,服务器备案与否不重要,SSL证书有DV类型免费版的。诸位可以去看看。笔者花的成本也不高,服务器做活动时99一年,域名买了个垃圾的4块钱,SSL证书免费,总成本也就100来块钱,做学习研究什么的,够用了。
从买域名,然后申请SSL证书,到最后的配置,我花费了有三天时间,其中踩了不少坑,希望能给大家一些参考,绕过这些坑。也希望大家要有毅力,做技术要迎难而上,最终才能解决,就是TM的,我日狗日的有点肾虚,先去喝瓶哇哈哈补补。
1.1 服务器
服务器配置好vapor环境,能够运行起来,让外部访问到你的接口,如果你的服务器没有备案,不要用80端口,默认的是80端口,所以你的vapor要使用其它端口。新的端口,要在阿里云的服务器设置里的安全组里添加下。
1.2 域名
自己随便买个吧,如果你的SSL是要用免费的,买一个就行了,因为只能单域名。域名要实名认证,然后解析到你的服务器,这一步相当于域名与你的服务器绑定,可以通过域名访问到你的服务器。其实域名是申请SSL证书所需要的,自己用的时候IP和域名都行。
1.3 SSL证书
在阿里云的安全服务里,有SSL证书选项,点进去,里面有很多类型,大部分都是收费的。选择DV类型,下面有个免费的。
后面的按照教程走吧,SSL申请必须要有域名,申请时,必须在域名解析中添加一条TXT类型的解析,如果你的SSL证书和域名是同一平台的,可以让他自动添加一条对应的解析。信息添对大概几个小时就申请下来了。
2,SSL配置
深坑
vapor服务器内部虽然有相关SSL配置内容,但是坑大太,我是没填平。先说说vapor内部的配置方法。
2.1vapor里有一个server.json文件,里面是配置端口什么的,这里有一个secrityLayer字段,我查看内部源码发现如果它是none的话,走的是http,如果是tls的话,走的是https,所以第一步是把这个字段改为tls
2.2查看官方文档http里的内容,可以看到tls的东西
https://docs.vapor.codes/2.0/http/server/
Verify
Verificiation of hosts and certificates can be disabled. They are enabled by default.
可以禁用主机和证书的验证。它们默认启用。
"tls": {
"verifyHost": false,
"verifyCertificates": false
}
Certificates
"tls": {
"certificates": "none"
}
Chain
"tls": {
"certificates": "chain",
"chainFile": "/path/to/chainfile"
}
Files
"tls": {
"certificates": "files",
"certificateFile": "/path/to/cert.pem",
"privateKeyFile": "/path/to/key.pem"
}
Certificate Authority
"tls": {
"certificates": "ca"
}
Signature
"tls": {
"signature": "selfSigned"
}
Signed File
"tls": {
"signature": "signedFile",
"caCertificateFile": "/path/to/file"
}
Signed Directory
"tls": {
"signature": "signedDirectory",
"caCertificateDirectory": "/path/to/dir"
}
这是啥,这TM都是啥,懵逼,一脸的蒙蔽,大爷的。
幸好下面还有一个例子
Example
Here is an example server.json
file using certificate files with a self signed signature and host verification redundantly set to true
.
下面是一个示例:'Server .JSON’文件,它使用具有自签名签名的证书文件,并将主机验证冗余设置为“true”。
{
"port": "8443",
"host": "0.0.0.0",
"securityLayer": "tls",
"tls": {
"verifyHost": true,
"certificates": "files",
"certificateFile": "/vapor/certs/cert.pem",
"privateKeyFile": "/vapor/certs/key.pem",
"signature": "selfSigned"
}
}
对,就是这个例子,两个都是pm。
顺带一下我配置遇到的问题吧,两个pem文件其实是一个pem,一个key文件,笔者配置上也运行起来了,https也能访问了,但是当接口出错时,服务器的socket链接就会中断。这个问题还在研究中。
你TM告诉我SSL证书里,哪个类型的有两个pm,阿帕奇,nginx,IIS的,还是其它的?瞎几把搞,试了一天,翻资料翻的手指疼,失败了。哪位大佬搞明白了,可以给我留言,在此不胜感激。
没办法,接着日狗,继续看官方文档,有道在手,我这英语八级的,怕个球。有猫腻,这最后一句啥意思啊。
翻译了一下:强烈建议您在生产中使用NGIX背后的vapor项目。在部署NGIX部分中阅读更多内容。
几个意思啊?需要nginx?,deploy Nginx这玩意可以点,点一下。于是我发现了新天地。这时候我就要骂娘了。尼玛啊,可以通过nginx映射到自己的vapor服务器上,你不弄的醒目点,害得我日了一天狗。
文档链接 https://docs.vapor.codes/2.0/deploy/nginx/
使用nginx映射自己的vapor的原理。盗的官方图
好了,下一步,在服务器上配置nginx吧,linux系统的服务器,配置教程很多,大家自行百度,能配置好最好,如果配置不好,不妨看看我的解决方法。
linux上配置坑还是比较多的,我配了老半天也没成功,三天时间,基本上都是在这些事上耗费了,建议大家找一个后台老手带着你弄。兵行险招,我在mac上配置了nginx,并且启动成功,在mac上配置简单的太多了,找到 usr/local/ect里的nginx文件夹,整套上传到服务器,完美。
Mac下配置nginx https://blog.csdn.net/zjuwwj/article/details/72773704
nginx的SSL配置
看一下nginx的SSL证书,就两个一个点pm文件,一个点key文件
把你的pm和key文件上传到服务器,记住路径。
找到nginx.conf文件,编辑他,在里面的HTTPS Service里,按照下面格式填写。
server {
//端口号
listen 8181 ssl;
server_name localhost;
//pm 文件路径
ssl_certificate /path/xxx.pem;
//key文件路径
ssl_certificate_key /path/xxx.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
//vapor服务器Public文件的路径
root /path/项目文件夹/Public/;
location / {
root html;
index index.html index.htm;
//vapor 服务器的地址+端口号
proxy_pass http://127.0.0.1:8081;
}
}
include servers/*;
}
然后启动,测试,从此日完狗了。
注意:nginx和vapor是两个服务器,但是端口号是唯一的,所以他俩不能用同一个端口号,如果你的服务器没有备案8080,443端口,都不要用。
我的服务器中的一个链接,给大家看一下