当前位置:嗨网首页>书籍在线阅读

07-安装TLS、SSL

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

7.2.1 安装TLS/SSL

SSL和它的升级版(TLS)会确保客户端和服务端发生的通信是安全的、防篡改的。TLS/SSL为HTTPS提供了底层加密,我会在下一节讲到。但是,进行HTTPS开发之前,我们需要进行一些环境配置。

TLS/SSL连接需要客户端和服务端之间进行一次握手。握手期间,客户端(通常是浏览器)会告诉服务端它所支持的安全性函数类型。然后服务端会挑选一个函数,并且发送一个SSL证书,该证书包含一个公钥。客户端确认收到证书后,会使用公钥生成一个随机数,然后发送给服务端。最后服务端使用私钥对随机数解密,并使用解密的结果来对通信加密。

为了让这个过程运行起来,需要同时生成公钥、私钥和证书。对于生产环境,证书将由受信任的机构(如域名注册商)签名,但在开发环境中,你可以使用自签名证书。这样做会让用户在浏览器中访问应用程序时出现一个明显的警告信息,但由于是开发站点并不能被公开访问,所以应该不是问题。

**阻止自签名证书的警告信息** 如果你使用自签名证书,那通过本地主机访问服务端就可以避免浏览器警告。你也可以通过使用Lets Encrypt(目前还处于公开测试阶段)来避免使用自签名证书,但无须花钱购买商业授权。Lets Encrypt网站提供了设置证书的文档。

用于生成必要文件的工具是OpenSSL。如果你使用的是Linux,那么这个工具应该已经安装了。Windows上有自己的二进制安装包,而苹果正在开发自己的加密工具。在这一节中,我将讲解如何设置Linux环境。

在命令行中输入以下命令:

openssl genrsa -des3 -out site.key 2048

这个命令会生成一个私钥。该私钥使用三重DES加密,以PEM格式保存,可以使用ASCII解码。

你会被要求输入密码,这个密码在后面的步骤中会用到,即创建一个CSR(certificate- signing request,证书签名请求)文件。

生成CSR文件时,你会被要求输入刚才创建的密码。你还需要回答一系列问题,包括国家缩写(比如美国就写US)、州或省、城市名、公司名和机构名,以及电子邮箱地址。“通用名称”(common name)是最重要的问题。这个名称指的是网站的主机名。请提供程序托管的主机名。在我的示例代码中,我为 examples.burningbird.net 创建了证书。

openssl req -new -key site.key -out site.csr

创建私钥需要密码。问题是,每次你启动服务都需要输入密码。而产品环境的问题就在于,你必须要提供密码。下面我们就看看如何移除密钥的密码。首先,请重命名密钥:

mv site.key site.key.org

然后输入:

openssl rsa -in site.key.org -out site.key

如果确定要移除密码,请确保密钥文件只对可信任的用户和分组可读,以确保服务器的安全。

下一步是生成自签名的证书。下面的命令会生成一个有效期为365天的证书:

openssl x509 -req -days 365 -in site.csr -signkey site.key -out final.crt

现在你就具备使用TLS/SSL和HTTPS所需要的一切先决条件了。