使用 OpenSSL 构建自签名证书步骤详解

365bet娱乐场 📅 2025-09-26 05:34:13 👤 admin 👁️ 3123 ❤️ 528
使用 OpenSSL 构建自签名证书步骤详解

前言

在开发测试、内部服务通信或搭建私有 CA(Certificate Authority)过程中,我们常常需要用到自签名证书(Self-Signed Certificate)。它不依赖第三方权威机构颁发,能快速构建 HTTPS 服务或 TLS 加密通道,特别适用于本地测试、局域网内部通信、IoT 设备认证等场景。

本篇文章将手把手教你如何使用 OpenSSL 构建自签名证书,涵盖从私钥生成到证书配置的完整流程。

一、环境准备

安装 OpenSSL

Windows: 可以使用 slproweb 提供的 OpenSSL 安装包。 安装后确保 openssl.exe 已加入系统环境变量,或使用完整路径。 找到安装目录“D:\Program Files\OpenSSL-Win64\bin”将其加入环境变量中。

Linux / macOS:

# Debian / Ubuntu

sudo apt install openssl

# macOS(使用 Homebrew)

brew install openssl

二、生成私钥(Private Key)

选择一个文件夹执行下面的命令

openssl genrsa -out mysite.key 2048

mysite.key:生成的私钥文件2048:表示生成 2048 位的 RSA 密钥(建议使用 2048 或以上) 如果需要更高安全性(如 ECC):

openssl ecparam -genkey -name prime256v1 -out mysite.key

三、生成证书签名请求(CSR)

CSR(Certificate Signing Request)是包含公钥及主体信息的证书请求文件。即便是自签名证书,也推荐通过 CSR 来规范生成证书的过程。

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

过程中会提示输入如下信息:

C:\Users\Lenovo\Desktop\cer>openssl req -new -key mysite.key -out mysite.csr

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [AU]:CN

State or Province Name (full name) [Some-State]:Guangdong

Locality Name (eg, city) []:Shenzhen

Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany

Organizational Unit Name (eg, section) []:Dev

Common Name (e.g. server FQDN or YOUR name) []:mysite.local

Email Address []:admin@mysite.local

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:123456

An optional company name []:MyCompany

C:\Users\Lenovo\Desktop\cer>

其中 Common Name(CN) 非常重要,必须与访问域名一致,如 localhost 或 mysite.local。

四、生成自签名证书(Self-Signed Certificate)

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

-req:从 CSR 文件生成证书-signkey:使用自己的私钥签名-days:证书有效期,单位为天

这样,我们就得到了:

mysite.key:私钥mysite.crt:自签名证书mysite.csr:签名请求文件(可选保留)

五、可选:生成包含扩展信息的证书(SAN 支持)

现代浏览器要求证书中必须包含 Subject Alternative Name (SAN),否则将视为不安全。

创建一个配置文件 mysite.cnf:

[req]

default_bits = 2048

prompt = no

default_md = sha256

distinguished_name = dn

req_extensions = req_ext

[dn]

C = CN

ST = Guangdong

L = Shenzhen

O = MyCompany

OU = Dev

CN = mysite.local

[req_ext]

subjectAltName = @alt_names

[alt_names]

DNS.1 = mysite.local

DNS.2 = localhost

然后执行以下命令:

# 生成带扩展的 CSR

openssl req -new -key mysite.key -out mysite.csr -config mysite.cnf

# 自签名证书,包含扩展字段

openssl x509 -req -in mysite.csr -signkey mysite.key -out mysite.crt -days 365 -extensions req_ext -extfile mysite.cnf

六、验证证书信息

可以使用以下命令查看证书详情:

openssl x509 -in mysite.crt -noout -text

输出内容中会包含:

证书有效期(Validity)主体信息(Subject)颁发者(Issuer)扩展信息(如 SAN)

七、常见用途示例

在本地 HTTPS 服务中使用(以 Node.js 为例):

编写一个server.js文件

const https = require('https');

const fs = require('fs');

const path = require('path');

// 读取证书和密钥文件

const options = {

key: fs.readFileSync(path.join(__dirname, 'mysite.key')),

cert: fs.readFileSync(path.join(__dirname, 'mysite.crt'))

};

// 创建HTTPS服务器

const server = https.createServer(options, (req, res) => {

res.writeHead(200);

res.end("Hello Secure World!");

});

// 监听4433端口

server.listen(4433, () => {

console.log('HTTPS server running on https://localhost:4433/');

});

执行启动命令

node server.js

访问 https://localhost:4433/ 即可。 由于使用的是自签名证书,浏览器会显示安全警告,你需要手动信任该证书(在Chrome中点击"高级"->“继续前往”)

查看证书详情:

导入证书

双击 mysite.crt 文件

选择"安装证书"

选择"本地计算机"(可能需要管理员权限)

选择"将所有证书放入下列存储",点击"浏览"

选择"受信任的根证书颁发机构",点击"确定"

完成向导

关闭浏览器,刷新页面即可。

八、总结

通过 OpenSSL,我们可以快速生成自签名证书并用于测试、内部服务通信等非生产环境。虽然这些证书不会被浏览器信任,但配合本地 CA 或自定义信任策略(如企业根证书),也可以实现较高的安全性。

如果你正处于开发 HTTPS 或 TLS 服务的阶段,不妨亲手实践本文操作。掌握 OpenSSL 是理解加密通信机制的第一步。

相关推荐

方舟生存进化金属箭怎么做 金属箭制作使用方法
365不给提款流水数据异常

方舟生存进化金属箭怎么做 金属箭制作使用方法

📅 09-21 👁️ 961
拯救者r7000内存条怎么加
365不给提款流水数据异常

拯救者r7000内存条怎么加

📅 09-15 👁️ 8586