📜  带有 ssl 的 http 服务器 (1)

📅  最后修改于: 2023-12-03 15:09:43.286000             🧑  作者: Mango

带有 SSL 的 HTTP 服务器

SSL(Secure Sockets Layer)是一种安全通信协议,它为网络传输提供了安全性和数据完整性保护。常用于 HTTPS 网站、电子邮件等需要加密传输的场景。本文将介绍如何在 HTTP 服务器上启用 SSL。

什么是 HTTP 服务器?

HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的协议。HTTP 服务器是指使用 HTTP 协议进行通信的服务器,也称为 Web 服务器。它能够处理客户端的请求,将数据发送给客户端。

SSL 证书

要启用 SSL,首先需要有 SSL 证书。SSL 证书是具有加密功能的数字证书。它包含服务器公钥、证书持有者信息、证书颁发机构信息等。HTTPS 客户端在连接服务器时会验证 SSL 证书的有效性,确保数据传输的安全性。

免费 SSL 证书

现在有多家机构提供免费的 SSL 证书,如 Let's Encrypt、Cloudflare、SSL.com 等。以下以 Let's Encrypt 为例,介绍 SSL 证书的获取和部署。

  • 安装 certbot 工具

certbot 是一个自动化工具,可用于获取 Let's Encrypt 的 SSL 证书。

sudo apt-get update
sudo apt-get install certbot
  • 获取 SSL 证书
sudo certbot certonly --standalone -d example.com -d www.example.com
  • 证书文件路径

获取证书后,证书文件和私钥文件保存在 /etc/letsencrypt/live/example.com 目录中。

HTTP 服务器启用 SSL

以 Node.js 为例,介绍如何启用 SSL。

创建 HTTPS 服务器
const https = require('https');
const fs = require('fs');

const options = {
  key: fs.readFileSync('/etc/letsencrypt/live/example.com/privkey.pem'),
  cert: fs.readFileSync('/etc/letsencrypt/live/example.com/fullchain.pem'),
  ca: fs.readFileSync('/etc/letsencrypt/live/example.com/chain.pem')
};

https.createServer(options, (req, res) => {
  res.writeHead(200);
  res.end('Hello, world!');
}).listen(443);

以上代码中,key 参数为私钥文件路径,cert 参数为完整证书路径,ca 参数为证书链路径。createServer 方法创建一个 HTTPS 服务器并启动,监听 443 端口。如果客户端使用的是 HTTP 协议,则无法连接到该服务器。

HTTP 重定向至 HTTPS

为了避免用户手动输入 https:// 或者点击了 HTTP 链接而无法连上 HTTPS 站点,可以在 HTTP 服务器上实现重定向功能。

const http = require('http');

http.createServer((req, res) => {
  res.writeHead(301, { Location: 'https://' + req.headers.host + req.url });
  res.end();
}).listen(80);

以上代码中,createServer 方法创建一个 HTTP 服务器并启动,监听 80 端口。当用户访问 HTTP 站点时,服务器会将请求重定向到 HTTPS 站点。

结语

SSL 是一种非常重要的加密协议,可以保证客户端和服务器之间的通信安全。本文介绍了如何获得免费 SSL 证书并启用 SSL 功能。同时,也介绍了如何将 HTTP 重定向至 HTTPS,以提高站点的安全性。