面试题答案
一键面试获取和配置 SSL 证书的一般流程
- 选择证书颁发机构(CA):
- 可以选择知名的商业 CA,如 Let's Encrypt(免费)、Comodo、Symantec 等。Let's Encrypt 因其免费且广泛支持受到开发者青睐。
- 验证域名所有权:
- 不同的 CA 有不同的验证方式,常见的有:
- DNS 验证:在域名的 DNS 记录中添加特定的 TXT 记录,CA 通过查询 DNS 来验证域名所有权。
- 文件验证:在网站根目录放置 CA 提供的特定文件,CA 通过访问该文件来验证。
- 不同的 CA 有不同的验证方式,常见的有:
- 生成证书签名请求(CSR):
- 在服务器上使用工具如 OpenSSL 生成 CSR。例如,使用以下命令:
openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr
- 过程中会提示输入国家、地区、组织等信息。
- 获取 SSL 证书:
- 将生成的 CSR 提交给选定的 CA。CA 验证通过后会颁发 SSL 证书,通常会提供证书文件(
.crt
)和中间证书文件(如果有)。
- 将生成的 CSR 提交给选定的 CA。CA 验证通过后会颁发 SSL 证书,通常会提供证书文件(
- 配置 SSL 证书:
- 将获取的证书文件(
.crt
)和私钥文件(.key
)放置在服务器的合适目录,例如/etc/ssl/certs
和/etc/ssl/private
。
- 将获取的证书文件(
使用 Node.js 内置模块实现 HTTPS 服务的关键代码步骤
- 引入
https
模块:const https = require('https'); const fs = require('fs');
- 读取 SSL 证书和私钥:
const options = { key: fs.readFileSync('/etc/ssl/private/domain.key'), cert: fs.readFileSync('/etc/ssl/certs/domain.crt') };
- 如果有中间证书,还需要添加
ca
字段,例如:
const ca = fs.readFileSync('/etc/ssl/certs/intermediate.crt'); const options = { key: fs.readFileSync('/etc/ssl/private/domain.key'), cert: fs.readFileSync('/etc/ssl/certs/domain.crt'), ca: ca };
- 如果有中间证书,还需要添加
- 创建 HTTPS 服务器:
const server = https.createServer(options, (req, res) => { res.writeHead(200); res.end('Hello, HTTPS!\n'); });
- 监听端口:
const port = 443; server.listen(port, () => { console.log(`HTTPS server running on port ${port}`); });
这样就将 Node.js 的 HTTP 服务升级为了 HTTPS 服务。