golang tls_Golang进行救援:从TLS风暴中拯救DevOps

golang tls

如果您需要在部署证书或证书链之前对其进行验证,则Golang提供了一种近乎万无一失的测试方法。 在本文中,我将解释我们的用例,该用例带来了测试证书链,检查适当的Web服务器安全设置以及分解用于测试的Go代码的需求。

最近,我进行了一个工作项目,该项目已经变成了一次冒险。 这是一个小型应用程序,似乎要花很多钱。 第三方构造了此应用程序,该应用程序现在由内部维护。 该项目位于Amazon Web Services中,并使用弹性负载均衡器(ELB)。

在进行任何重新设计工作之前,我必须解决一个关键问题-ELB上的证书即将过期,需要更新。 新证书来自一家大型SSL供应商,该供应商在其网站上提供了过时的文档和最新文档。 该文档还更适合于封闭源操作系统和应用程序。 我之所以这样说是因为,如果您打算通过TLS提供内容,那么您最好在Qualys SSL Test上获得A等级。 要获得该A评级,您必须拥有中间证书作为您的连锁店的一部分。

测试证书链的方法有很多,但是测试可能会有些混乱。 我以为如果ELB, NGINX或httpd开始,那是一个好兆头。 对我而言,这是一个错误的假设,最后我花了几分钟时间搞坏了一条锁链。 这并没有破坏网站,但是绝对不是我想要保留一切的方式。

我需要一个如果提供的证书链不正确就会失败的工具。 我想要一个可以公开访问的轻量级工具。 要求对证书和配置进行第三方分析。 我找不到能够满足此需求的工具,因此我决定构建自己的工具。 我转向了开源语言Golang。

Golang(或Go)是由Robert Griesemer,Rob Pike和Ken Thompson在Google创建的一种开源语言。 Go是Algol和C的传统编译语言,具有静态类型的语言,具有垃圾回收,有限的结构化类型,内存安全性功能和CSP风格的并发编程功能。 Go在速度,功能和简单性之间提供了绝佳的平衡。

我的Go Web服务器使用三个Go软件包: logcrypto / tlsnet / http 。 您可以从GitHub 下载代码

图1:作者的简短Go程序,可在GitHub上找到。

Go 日志包非常容易说明-它是启用日志记录的包。 在这种用例中,出现故障的迹象应该会出现明显的故障。 log具有三个助手功能: print致命恐慌 。 包的输出发送到stderr。 我使用了致命错误来使Web服务器停止并记录任何问题。

Go crypto / tls包部分实现了TLS 1.2,如RFC 5246中所指定。 该软件包可配置可使用的SSL / TLS版本,并标识在握手期间使用的首选密码套件和椭圆曲线。 这是安全处理连接的软件包。

Go Web服务器中使用的关键软件包是net / http软件包。 它是HTTP的Go实现。 net / http具有一个名为ListenAndServeTLS的功能。 这提供了所需的证书检查功能。 根据用于ListenAndServeTLS的软件包文档,“如果证书是由证书颁发机构签名的,则certFile应该是服务器的证书,任何中间件和CA的证书的串联。”

该代码创建了一个mux ,它是HTTP请求多路复用器的缩写。 该多路复用器具有创建带有标头和内容的HTTP服务器的功能(Hello World!)。 cfg引入了您在可靠的NGINX或httpd配置中看到的所有TLS位和片段。 srv将各个部分放在一起,并定义要侦听的端口。 行log.Fatal(srv.ListenAndServeTLS(“ tls.crt”,“ tls.key”))定义要使用的证书文件,如果无效,则记录致命错误。

Go代码完全按照我的需要执行操作,仅用34行代码即可完成。 编译代码后,Web服务器小于6MB。 我能够将其他开源项目和文章(如本篇)中的大多数Go代码拼凑在一起。 可以将Web服务器安全地部署到任何公共服务器上,并对其进行测试以进行额外审查。

您有方便的Go技巧可以分享吗? 将您的故事想法发送至open@opensource.com

翻译自: https://opensource.com/article/17/4/testing-certificate-chains-34-line-go-program

golang tls

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值