OpenSSL生成密钥对
发表于|更新于
|字数总计:1.4k|阅读时长:5分钟|阅读量:
OpenSSL生成密钥对
一、生成私钥
首先生成一个私钥文件。使用 openssl
命令行工具可以很容易地生成。
1
| openssl genrsa -out private.key 2048
|
此命令生成一个 2048 位的 RSA 私钥,并将其保存到 private.key
文件中。
二、生成证书签名请求(CSR)
有了私钥之后,可以生成证书签名请求(CSR)。CSR 是发送给证书颁发机构(CA)的请求,用于申请数字证书。
1
| openssl req -new -key private.key -out request.csr
|
在执行此命令时,会要求输入一些信息,如国家、省份、城市、组织名、组织单位名和公共名(通常是域名)。
三、生成自签名证书(可选)
如果不想通过CA签署证书,可以生成自签名证书,这在测试和开发环境中非常有用。
1
| openssl req -x509 -key private.key -in request.csr -out certificate.pem -days 365
|
此命令生成一个自签名证书,有效期为 365 天,并将其保存到 certificate.pem
文件中。
下面都是在扯淡不用看
手动生成RSA2048加密的TLS1.3证书
手动生成一对TLS1.3证书的步骤如下:
- 生成私钥:
首先需要生成服务器和客户端的私钥。这可以使用OpenSSL来完成。
1 2
| openssl genpkey -algorithm RSA -out server.key -pkeyopt rsa_keygen_bits:2048 openssl genpkey -algorithm RSA -out client.key -pkeyopt rsa_keygen_bits:2048
|
- 生成证书签名请求(CSR):
接下来,使用私钥生成证书签名请求(CSR)。
1 2
| openssl req -new -key server.key -out server.csr -subj "/C=US/ST=California/L=San Francisco/O=My Company/OU=Org/CN=example.com" openssl req -new -key client.key -out client.csr -subj "/C=US/ST=California/L=San Francisco/O=My Company/OU=Org/CN=client.example.com"
|
- 生成自签名证书:
使用CSR和私钥生成自签名证书。注意,这里可以生成CA证书,然后使用CA证书来签署服务器和客户端的证书。
1 2 3 4 5 6 7 8 9
| openssl genpkey -algorithm RSA -out ca.key -pkeyopt rsa_keygen_bits:2048 openssl req -new -x509 -key ca.key -out ca.crt -days 3650 -subj "/C=US/ST=California/L=San Francisco/O=My Company CA/OU=Org/CN=ca.example.com"
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -sha256
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365 -sha256
|
- 配置TLS1.3:
确保服务器和客户端的配置文件(如nginx、Apache或其他TLS支持的软件)使用TLS1.3。以nginx为例:
1 2 3 4 5 6 7 8 9 10 11 12
| server { listen 443 ssl; server_name example.com;
ssl_certificate /path/to/server.crt; ssl_certificate_key /path/to/server.key;
ssl_protocols TLSv1.3; ssl_ciphers 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256';
... }
|
- 验证证书:
使用以下命令验证证书链和配置是否正确:
1 2
| openssl verify -CAfile ca.crt server.crt openssl verify -CAfile ca.crt client.crt
|
通过以上步骤,你应该能够手动生成并配置TLS1.3证书。确保你的软件版本支持TLS1.3,并且配置文件中启用了TLS1.3相关的选项。
手动生成EC384加密的TLS1.3证书
要生成一对使用EC384加密的TLSv1.3证书,可以按照以下步骤进行:
- 生成私钥:
使用OpenSSL生成服务器和客户端的私钥。
1 2
| openssl ecparam -name secp384r1 -genkey -noout -out server.key openssl ecparam -name secp384r1 -genkey -noout -out client.key
|
- 生成证书签名请求(CSR):
使用私钥生成证书签名请求(CSR)。
1 2
| openssl req -new -key server.key -out server.csr -subj "/C=US/ST=California/L=San Francisco/O=My Company/OU=Org/CN=example.com" openssl req -new -key client.key -out client.csr -subj "/C=US/ST=California/L=San Francisco/O=My Company/OU=Org/CN=client.example.com"
|
- 生成自签名证书:
使用CSR和私钥生成自签名证书。可以先生成CA证书,然后使用CA证书来签署服务器和客户端的证书。
1 2 3 4 5 6 7 8 9
| openssl ecparam -name secp384r1 -genkey -noout -out ca.key openssl req -new -x509 -key ca.key -out ca.crt -days 3650 -subj "/C=US/ST=California/L=San Francisco/O=My Company CA/OU=Org/CN=ca.example.com"
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -sha256
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365 -sha256
|
- 配置TLS1.3:
确保服务器和客户端的配置文件(如nginx、Apache或其他TLS支持的软件)使用TLS1.3。以nginx为例:
1 2 3 4 5 6 7 8 9 10 11 12
| server { listen 443 ssl; server_name example.com;
ssl_certificate /path/to/server.crt; ssl_certificate_key /path/to/server.key;
ssl_protocols TLSv1.3; ssl_ciphers 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256';
... }
|
- 验证证书:
使用以下命令验证证书链和配置是否正确:
1 2
| openssl verify -CAfile ca.crt server.crt openssl verify -CAfile ca.crt client.crt
|
通过以上步骤,你应该能够生成并配置使用EC384加密的TLSv1.3证书。确保你的软件版本支持TLS1.3,并且配置文件中启用了TLS1.3相关的选项。
/C=US
:国家名称(Country Name),使用ISO 3166-1标准的国家代码。在这个例子中,US
代表美国。
/ST=California
:州或省名称(State or Province Name)。在这个例子中,California
代表加利福尼亚州。
/L=San Francisco
:本地名称(Locality Name),通常是城市名称。在这个例子中,San Francisco
代表旧金山市。
/O=My Company CA
:组织名称(Organization Name)。在这个例子中,My Company CA
代表公司的名称,这里假设是一个叫做“My Company CA”的公司。
/OU=Org
:组织单位名称(Organizational Unit Name),通常用于指定组织的一个部门或单位。在这个例子中,Org
代表某个部门或单位。
/CN=ca.example.com
:通用名称(Common Name),通常是证书颁发给的域名或个人的名字。在这个例子中,ca.example.com
代表证书颁发给的域名。