创建带SubjectAltName的SSL证书

这篇博客介绍了如何使用OpenSSL命令行工具生成RSA密钥对、证书请求文件、自签名证书以及配置扩展字段,包括设置主题密钥标识符、权威密钥标识符、基本约束、密钥用途和备用名称等。
openssl genrsa -out demo.key 2048
openssl req -key demo.key -new -out demo.csr
touch demo.v3.ext
subjectKeyIdentifier   = hash
authorityKeyIdentifier = keyid:always,issuer:always
basicConstraints       = CA:TRUE
keyUsage               = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment, keyAgreement, keyCertSign
subjectAltName         = DNS:xxx.xxx.xxx.com, DNS:xxx.xxx.xxx.com
issuerAltName          = issuer:copy
openssl x509 -req -in demo.csr -signkey demo.key -out demo.crt -days 8650 -sha256 -extfile demo.v3.ext
<think>我们注意到用户的问题是在Windows系统上生成SSL证书,并且用户之前的上下文是关于在Nginx中配置自签名证书。因此,本回答将专注于在Windows系统上生成自签名SSL证书的步骤,以便用于Nginx配置。 参考引用[2]和[5]提到使用OpenSSL工具在Windows上生成证书。因此,我们将使用OpenSSL来完成这个任务。 ### 步骤1:安装OpenSSL 1. 访问OpenSSL的Windows版本下载页面:https://slproweb.com/products/Win32OpenSSL.html (引用[2]) 2. 下载适合你系统的版本(如Win64 OpenSSL v3.3.1 EXE或MSI) 3. 运行安装程序,按照提示进行安装。注意在安装过程中选择“将OpenSSL的目录添加到系统的PATH环境变量”以便在命令行中使用。 安装完成后,打开命令提示符(cmd)或PowerShell,输入以下命令验证安装: ```cmd openssl version ``` 如果显示版本信息,则表示安装成功。 ### 步骤2:生成自签名证书 1. 创建一个目录来存放证书文件,例如在D盘创建`ssl`目录: ```cmd mkdir D:\ssl cd D:\ssl ``` 2. 生成私钥(server.key): ```cmd openssl genrsa -out server.key 2048 ``` 这里使用RSA算法,密钥长度2048位。 3. 生成证书签名请求(CSR文件): ```cmd openssl req -new -key server.key -out server.csr ``` 在执行此命令时,会提示输入一些信息,包括国家、省份、城市、组织名称等。其中,`Common Name`(常用名)非常重要,应填写你打算使用该证书的域名(例如:localhost或内网IP)。其他信息可以按需填写,也可以直接按回车跳过。 4. 生成自签名证书(CRT文件): ```cmd openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt ``` 这里设置证书有效期为365天。 ### 步骤3:配置Nginx使用证书 将生成的`server.crt`和`server.key`文件复制到Nginx的配置目录中,例如`C:\nginx\conf\ssl`(如果没有ssl目录,请创建)。 然后,在Nginx的配置文件中(如`nginx.conf`或`conf.d`目录下的某个配置文件)添加如下配置: ```nginx server { listen 443 ssl; server_name localhost; # 或你的域名 ssl_certificate conf/ssl/server.crt; ssl_certificate_key conf/ssl/server.key; # 其他配置... } ``` ### 步骤4:重启Nginx并测试 1. 重启Nginx服务: ```cmd nginx -s reload ``` 或者如果Nginx是作为服务运行的,可以在服务管理器中重启。 2. 在浏览器中访问`https://localhost`(或你配置的域名),由于是自签名证书,浏览器会显示不安全警告,此时可以手动信任该证书(方法见下文)。 ### 客户端信任证书(以Windows为例) 1. 双击生成的`server.crt`文件,打开证书对话框。 2. 点击“安装证书”,选择“本地计算机”,点击“下一步”。 3. 选择“将所有证书放入下列存储”,点击“浏览”,选择“受信任的根证书颁发机构”,点击“确定”。 4. 点击“下一步”,然后点击“完成”。 ### 验证 再次访问`https://localhost`,浏览器将不再显示安全警告。 ### 相关问题 1. 如何为多个域名(SAN)生成自签名证书? 2. 如何在Windows上使用keytool生成SSL证书(如引用[3])? 3. 如何配置Nginx同时支持HTTP和HTTPS? 4. 如何将证书转换为其他格式(如PFX)? 5. 如何自动续签自签名证书? > 注意:自签名证书仅适用于测试或内网环境,公网服务应使用受信任的CA颁发的证书[^1]。 [^1]: 在 Windows 上生成本地 SSL 证书并使用 HTTPS 访问本地 Nginx 服务器。 [^2]: 环境 Windows、Linux, 证书我是在Windows上生成的自签证书。 [^3]: windows环境+tomcat:生成https协议的SSL证书。 [^4]: windows生成自定义签名SSL证书并配置Nginx。 [^5]: windows openssl局域网生成ssl证书。</think>### 在 Windows 系统上生成 SSL 证书的完整指南 #### 方法一:使用 OpenSSL(推荐) 1. **安装 OpenSSL** - 下载 [OpenSSL for Windows](https://slproweb.com/products/Win32OpenSSL.html)(选择最新 EXE 或 MSI 版本) - 安装时勾选 **"Add OpenSSL to the system PATH"**(添加环境变量)[^2] 2. **生成证书** ```cmd :: 创建证书目录 mkdir C:\ssl cd C:\ssl :: 生成私钥(2048位RSA加密) openssl genrsa -out server.key 2048 :: 生成证书签名请求(CSR) openssl req -new -key server.key -out server.csr ``` 填写信息时需注意: ``` Common Name (eg, your name or server's hostname) []: localhost # 必须填写访问域名 ``` 3. **生成自签名证书(CRT文件)** ```cmd :: 生成有效期为10年的证书 openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt :: 查看证书信息 openssl x509 -in server.crt -text -noout ``` #### 方法二:使用 Java Keytool(适合 Java 环境) ```cmd :: 生成PKCS12格式密钥库 keytool -genkeypair -alias myserver -keyalg RSA -keysize 2048 -validity 3650 -keystore C:\ssl\keystore.p12 -storetype PKCS12 :: 导出CRT证书文件 keytool -exportcert -alias myserver -keystore C:\ssl\keystore.p12 -file C:\ssl\server.crt -rfc ``` #### 证书文件说明 | 文件扩展名 | 用途 | 安全等级 | |------------|-------------------------------|----------| | `.key` | 私钥文件(必须严格保密) | 🔒🔒🔒 | | `.crt` | 公钥证书(可公开分发) | 🔒 | | `.csr` | 证书签名请求(用于CA申请) | - | | `.p12` | PKCS12格式密钥库(含私钥) | 🔒🔒🔒 | #### 配置 Nginx 使用证书 ```nginx server { listen 443 ssl; server_name localhost; ssl_certificate C:/ssl/server.crt; ssl_certificate_key C:/ssl/server.key; # 其他配置... } ``` #### 信任证书(解决浏览器警告) 1. 双击 `server.crt` 文件 2. 点击 **"安装证书"** → **"本地计算机"** 3. 选择 **"受信任的根证书颁发机构"** 4. 完成导入后重启浏览器[^1] #### 验证证书有效性 ```cmd :: 检查证书信息 openssl x509 -in C:\ssl\server.crt -text -noout :: 测试HTTPS连接(使用Git Bash) curl -v -k https://localhost ``` ### 常见问题解决 1. **证书不受信任警告** - 确保将证书导入到 **"受信任的根证书颁发机构"** - 浏览器缓存清理后重试 2. **Nginx 报错 "SSL: error:0B080074"** - 检查文件路径:Windows 使用正斜杠 `/` 或双反斜杠 `\\` - 验证私钥与证书是否匹配: ```cmd openssl x509 -noout -modulus -in server.crt | openssl md5 openssl rsa -noout -modulus -in server.key | openssl md5 ``` 两个 MD5 值必须相同[^4] 3. **SAN(主题备用名称)支持** 创建 `san.conf` 文件: ```ini [req] distinguished_name = req_distinguished_name req_extensions = v3_req [v3_req] subjectAltName = @alt_names [alt_names] DNS.1 = localhost IP.1 = 192.168.1.100 ``` 生成命令: ```cmd openssl req -new -key server.key -out server.csr -config san.conf ``` ### 相关问题 1. 如何为局域网 IP 地址生成 SSL 证书? 2. 如何将 PFX/PKCS12 证书转换为 KEY+CRT 格式? 3. 自签名证书和 CA 签名证书有何本质区别? 4. 如何配置 Chrome 浏览器永久信任自签名证书? 5. 证书过期后如何无缝续期不影响服务? > 提示:自签名证书适合开发和内网环境,生产环境建议使用 [Let's Encrypt](https://letsencrypt.org/) 免费证书。对于需要多设备信任的场景,可通过组策略批量部署证书[^5]。 [^1]: 在 Windows 上生成本地 SSL 证书并使用 HTTPS 访问本地 Nginx 服务器 [^2]: 环境 Windows、Linux, 证书我是在Windows上生成的自签证书 [^3]: windows环境+tomcat:生成https协议的SSL证书 [^4]: windows生成自定义签名SSL证书并配置Nginx [^5]: windows openssl局域网生成ssl证书
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值