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证书的步骤如下:

  1. 生成私钥
    首先需要生成服务器和客户端的私钥。这可以使用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
  1. 生成证书签名请求(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"
  1. 生成自签名证书
    使用CSR和私钥生成自签名证书。注意,这里可以生成CA证书,然后使用CA证书来签署服务器和客户端的证书。
1
2
3
4
5
6
7
8
9
# 生成CA私钥和自签名证书
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
  1. 配置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. 验证证书
    使用以下命令验证证书链和配置是否正确:
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证书,可以按照以下步骤进行:

  1. 生成私钥
    使用OpenSSL生成服务器和客户端的私钥。
1
2
openssl ecparam -name secp384r1 -genkey -noout -out server.key
openssl ecparam -name secp384r1 -genkey -noout -out client.key
  1. 生成证书签名请求(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"
  1. 生成自签名证书
    使用CSR和私钥生成自签名证书。可以先生成CA证书,然后使用CA证书来签署服务器和客户端的证书。
1
2
3
4
5
6
7
8
9
# 生成CA私钥和自签名证书
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
  1. 配置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. 验证证书
    使用以下命令验证证书链和配置是否正确:
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代表证书颁发给的域名。