生成SSL证书

详解生成SSL证书流程

Title:生成SSL证书
Date:2015-05-22 15:08:42
Category:Server Develop
Tag:技术,生活,Server Develop
Author:EricTang

最近在忙活公司的事情,所以博客更新少了,但还是尽量有时间把自己平时的一些笔记整理记录下来。这里之所以把SSL证书的创建过程记录一下,至于用处嘛,是打算自己写一个iOS的内网Daily Build和分发。闲话不表,我们来看具体的步骤。

准备工作

首先,先创建一个文件夹,我们这里取名叫demoCA,然后参考openssl.cfg/openssl.cnf文件,不确定为啥命名是这样儿的,可以打开openssl.cnf看看内容就清楚了,按照自己的需要设置证书要用的目的之类的,当然,这里我们无需自己设置,可以直接使用默认的。然后我们在demoCA目录下,分别创建certs、newcerts文件夹,并且创建一个空白的index.txt文件和一个serial文件,在serial文件中填充任意的16进制数字,如0000,准备工作,基本到这里就结束了,接下来我们开始正式生成SSL证书。

开始生成SSL证书
1. 首先,生成服务器端的私钥(key文件):
$openssl genrsa -des3 -out server.key 1024

之后会提示输入密码,这个密码是用于加密这个key文件的,其中参数des3是加密的算法,也可以选择其它的例如aes算法。

如图:

img

以后每次需要读取该key文件时都要输入密码,如果觉得太麻烦也可以直接去掉,去掉key文件口令的命令是:

$openssl rsa -in server.key -out server.key
2. 按照我们的配置文件,生成证书签名请求文件,即CSR文件(Certificate Signing Request),生成的CSR文件交给CA签名形成服务端自己的证书,命令如下:
$openssl req -new -key server.key -out server.csr -config openssl.cnf

填写如图所示的基本信息:

img

3. 对客户端也作同样的命令,生成key和CSR文件
$openssl genrsa -des3 -out client.key 1024

$openssl req -new -key client.key -out client.csr -config openssl.cnf

参考服务端的生成方法,填写信息即可。

4. CSR文件必须有CA的签名才可以生成证书,这里我们直接自己做CA。

在当前目录下执行如下命令:

$openssl req -new -x509 -keyout ca.key -out ca.crt -config openssl.cnf

之后会看到在SelfCA目录下生成了一个ca.key和ca.crt文件

5. 用刚生成的CA证书为server.csr,client.csr文件签名:
$Openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf

$Openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config openssl.cnf

之后,我们应该就已经创建了可以使用的证书了,如果在签名的过程中有任何错误,可以先看一下index.txt文件中的信息,然后清空它,重新执行第5步中失败的操作。

<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证书
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值