使用HTTPS轻松保护您的完美服务器端Swift代码

作为软件开发人员,我们应该做的最关键的事情之一就是确保我们管理的数据是安全的,第一步应该始终是强制执行SSL加密。

这意味着任何访问您的API或老实说您的网站的人都应该使用HTTPS通过端口443对其进行访问,并在其浏览器中获得一个漂亮的封闭锁符号。

因此,在本文中,我将向您展示启动使用LetsEncrypt证书同时适用于端口80上的未加密流量和端口443上的加密流量的服务器的简单性。

首先,我从Perfect Assistant创建的全新AWS实例开始,所以我知道它拥有所有正确的功能。

接下来,我要查看https://certbot.eff.org/#ubuntuxenial-other来安装LetsEncrypt Certbot。 这将使我们轻松创建和验证证书。

按照说明进行以下操作:

  $ sudo add-apt-repository ppa:certbot / certbot 
$ sudo apt-get更新
$ sudo apt-get install certbot

在安装过程中,我将回到Perfect Assistant,并为Perfect Template制作一个新的克隆。 这将为我提供所有需要的东西的一个文件开始。

一旦克隆并构建了Xcode项目,我们将对模板的main.swift文件进行一些操作。 目前的模板具有1个HTML路由和2个“服务器”,但是我们想用2个稍有不同的服务器替换“ handler”功能。

  //此“处理程序”功能用于端口80。 
func handler80(data:[String:Any])抛出-> RequestHandler {
返回{
请求,回应
response.appendBody(string:“ 你好,世界! 你好,世界!端口80 ”)
response.completed()
}
}
  //此“处理程序”功能用于端口443。 
func handler443(data:[String:Any])抛出-> RequestHandler {
返回{
请求,回应
response.appendBody(string:“ 你好,世界! 你好,世界!端口443 ”)
response.completed()
}
}

接下来,让我们替换“ confData”,它是HTTP服务器的配置:

 让confData = [ 
“服务器”:[
//服务端口80
[
“ name”:“ localhost”,
“端口”:80,
“路线”:[
[“ method”:“ get”,“ uri”:“ /”,“ handler”:handler80],
[“ method”:“ get”,“ uri”:“ / **”,
“处理程序”:PerfectHTTPServer.HTTPHandler.staticFiles,
“ documentRoot”:“ ./ webroot”,
“ allowResponseFilters”:true]
],
“过滤器”:[
[
“ type”:“响应”,
“ priority”:“ high”,
“名称”:PerfectHTTPServer.HTTPFilter.contentCompression,
]
]
]
]

现在,所有要做的就是在端口80上创建服务器-我们需要这样做,以便Certbot可以为我们获取SSL证书。 Certbot还需要我们在项目的表面创建一个“ webroot”目录。

现在,使用Perfect Assistant将项目“部署”到AWS实例。 成功后,记下IP地址。 我们需要为此创建一个DNS A记录条目。 它看起来应该类似于“ test.mydomain.com A 123.123.123.123”,其中test.mydomain.com是域/子域,而IP地址是服务器的IP地址。

一旦DNS完成(并可以向全世界使用),http://test.mydomain.com应该会产生“您好,世界! 端口80” ……我们已经准备好进入下一阶段并创建证书。

返回服务器上的终端会话,输入:

  sudo certbot certonly --webroot -w / perfect-deployed / httpstest / webroot / -d test.mydomain.com 

其中test.mydomain.com是域名, “ / perfect-deployed / httpstest / webroot /”是使用Perfect Assistant部署的应用程序的所有路径。

这给出了以下内容:

 开始新的HTTPS连接(1):supporters.eff.org 
获得新证书
面临以下挑战:
针对test.mydomain.com的http-01挑战
对所有不匹配的域使用webroot路径/ perfect-deployed / httpstest / webroot。
等待验证中…
清理挑战
产生金钥(2048位元):/etc/letsencrypt/keys/0000_key-certbot.pem
创建CSR:/etc/letsencrypt/csr/0000_csr-certbot.pem
重要笔记:
-恭喜! 您的证书和链条已保存在
/etc/letsencrypt/live/test.mydomain.com/fullchain.pem。 您的证书
将于2017-07-02到期。 获取新的或调整后的版本
以后再使用此证书,只需再次运行certbot。 至
非交互式更新您的所有证书,请运行“ certbot
更新”

这给了我们2条重要信息:

  • 证书文件位于“ / etc / letsencrypt / live / test.mydomain.com /fullchain.pem”
  • 密钥文件位于“ /etc/letsencrypt/keys/0000_key-certbot.pem”

回到Xcode,我将更改端口,处理程序,并为配置添加“ tlsConfig”字典。 现在,服务器部分如下所示:

  //服务端口443。 
[
“ name”:“ localhost”,
“端口”:443,
“路线”:[
[“ method”:“ get”,“ uri”:“ /”,“ handler”:handler443],
[“ method”:“ get”,“ uri”:“ / **”,
“处理程序”:PerfectHTTPServer.HTTPHandler.staticFiles,
“ documentRoot”:“ ./ webroot”,
“ allowResponseFilters”:true]
],
“过滤器”:[
[
“ type”:“响应”,
“ priority”:“ high”,
“名称”:PerfectHTTPServer.HTTPFilter.contentCompression,
]
],
“ tlsConfig”:[
“ certPath”:“ /etc/letsencrypt/live/test1.iamjono.io/fullchain.pem”,
“ verifyMode”:“对等”,
“ keyPath”:“ /etc/letsencrypt/keys/0000_key-certbot.pem”
]
]

现在,部署此服务器应该只能在443上提供给我一台服务器。因此,我进行了部署,然后完成操作,请访问https://testmydomain.com,然后我会看到期望的结果!

“你好,世界! 端口443” ,浏览器具有不错的关闭锁!

“完成的”示例可从https://github.com/PerfectExamples/HTTPS-Configuration获得。 请注意,您需要确保使用案例的路径正确。