问题描述
在一台裸机上运行着Ubuntu系统的机器上运行Jenkins,并希望学习如何启用https(使用一个名义上有效的证书)。他想要与git实例和其他工具进行通信,并保持自动化工具的安全性。他认为最简单的方法是使用反向代理NGINX。但是他在设置或按照nginx的初始步骤获取证书时遇到了问题,因为密钥生成工具(keytool)在给定URL时没有任何反应。它一直说我的计算机的FQDN无效。他猜测这是因为他的Ubuntu机器在NAT后面。他猜测在只有出口而没有入口的私有LAN上创建一个受信任的服务器是不现实的。他想知道是否真的需要一个真实的域名。虽然他有一个域名,但由于这与工作相关,他不愿在工作和娱乐之间建立任何链接。他希望了解是否有一个适合初学者的三步流程,可以帮助他在内部实验性的Jenkins设置中完成这个过程。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
步骤1:了解TLS/SSL
在继续之前,你需要先了解什么是TLS/SSL以及它是如何工作的。你可以在security.stackexchange.com上找到很多关于这个问题的问题,其中许多问题甚至链接到了RFC,你可以在其中阅读关于它如何工作的详细解释。
步骤2:配置NGINX与TLS/SSL证书
要配置NGINX与TLS/SSL证书一起工作,你可以使用https://www.digitalocean.com/community/tools/nginx生成模板。只需按照指南操作,它将创建一个相对安全的虚拟主机。如果你想进一步增强安全性,你可以按照cipherli.st的指南进行操作。他们经常更新指南,所以提供的设置通常是最新的。
步骤3:生成有效的证书
什么使证书“有效”或“无效”?这取决于证书颁发机构(Certificate Authority,CA)。你可以创建一个私有的CA证书,并使用它来签署证书签名请求(Certificate Signing Request,CSR)。CSR可以由CA签署并返回给需要它的人(在这种情况下是Nginx服务器)。有多个在线教程可以帮助你完成这个过程,你可以使用easy-rsa来完成大部分工作。然而,这种方法的缺点是你需要在网络中的所有机器上安装CA证书和浏览器中的所有必要密钥库。否则,这些机器将把站点的证书视为“不受信任”,因为它来自一个未知的证书颁发机构。在某些情况下,你还可以为nginx创建一个证书捆绑包。
步骤4:使用Let’s Encrypt(可选)
如果你有一个可用的入口,你可以使用Let’s Encrypt自动签发证书,而无需通过自己的CA和签发证书来复杂化设置。
注意:图片来自ssl.com。