gmssl 命令行创建证书请求
时间: 2023-09-17 20:14:28 浏览: 220
可以使用 gmssl 命令行工具来创建证书请求,具体操作如下:
1. 生成私钥
使用以下命令生成 2048 位的私钥:
```
gmssl genpkey -algorithm SM2 -out private.key
```
2. 创建证书请求
使用以下命令生成证书请求:
```
gmssl req -new -key private.key -out req.csr
```
在执行该命令后,需要填写一些证书请求信息,如 Common Name,Organization Name 等。
3. 查看证书请求
使用以下命令查看生成的证书请求:
```
gmssl req -text -noout -in req.csr
```
该命令可以查看证书请求中包含的信息。
注意:在使用 gmssl 命令行工具时,需要先安装 gmssl 库,并将 gmssl 命令添加到系统环境变量中。
相关问题
gmssl命令行怎么用
`gmssl` 是一个 OpenSSL 的分支,它的命令行使用方法与 OpenSSL 类似。下面是一些 `gmssl` 常用命令的用法示例:
1. 生成 RSA 密钥对:
```sh
gmssl genrsa -out private.pem 2048
```
这条命令会生成一个 2048 位的 RSA 密钥对,并将私钥保存到 `private.pem` 文件中。
2. 生成自签名证书:
```sh
gmssl req -new -x509 -key private.pem -out cert.pem -subj "/CN=example.com"
```
这条命令会使用 `private.pem` 中的私钥生成一个自签名证书,并将证书保存到 `cert.pem` 文件中。`-subj` 参数指定了证书的主题信息,这里将证书的 Common Name 设置为 `example.com`。
3. 查看 PEM 格式证书信息:
```sh
gmssl x509 -in cert.pem -text -noout
```
这条命令会输出 `cert.pem` 中的证书信息。
4. 查看 PKCS#12 格式证书信息:
```sh
gmssl pkcs12 -info -in cert.p12
```
这条命令会输出 `cert.p12` 中的证书和私钥信息。
5. 对称加密文件:
```sh
gmssl enc -aes-256-cbc -in plaintext.txt -out ciphertext.enc -pass pass:password
```
这条命令会使用 AES-256-CBC 算法对 `plaintext.txt` 文件进行加密,并将加密后的结果保存到 `ciphertext.enc` 文件中。`-pass` 参数指定了密码,这里使用了明文密码 `password`。
6. 对称解密文件:
```sh
gmssl enc -d -aes-256-cbc -in ciphertext.enc -out plaintext.txt -pass pass:password
```
这条命令会使用 AES-256-CBC 算法对 `ciphertext.enc` 文件进行解密,并将解密后的结果保存到 `plaintext.txt` 文件中。`-d` 参数指定了解密操作,`-pass` 参数指定了密码,这里使用了与加密时相同的明文密码 `password`。
以上是一些 `gmssl` 常用命令的示例,更多命令和选项可以查看 `gmssl` 的帮助文档。
c 语言使用gmssl 创建证书请求
使用GMSSL库创建证书请求可以按照以下步骤进行:
1. 初始化GMSSL库
需要在代码中调用以下函数来初始化GMSSL库:
```c
#include <openssl/conf.h>
#include <openssl/evp.h>
#include <openssl/err.h>
#include <openssl/rand.h>
#include <openssl/pem.h>
// 初始化GMSSL库
void init_ssl()
{
OpenSSL_add_all_algorithms();
OpenSSL_add_all_ciphers();
OpenSSL_add_all_digests();
ERR_load_crypto_strings();
RAND_load_file("/dev/urandom", 1024);
}
```
2. 创建证书请求
下面是一个示例代码,其中包含了创建证书请求的完整流程:
```c
#include <openssl/x509.h>
#include <openssl/x509v3.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <openssl/err.h>
// 创建证书请求
X509_REQ* create_cert_req(RSA* rsa, const char* subject_name)
{
EVP_PKEY* pkey = EVP_PKEY_new();
X509_REQ* req = X509_REQ_new();
X509_REQ_set_version(req, 0L);
// 设置证书请求的主题信息
X509_NAME* name = X509_NAME_new();
X509_NAME_add_entry_by_txt(name, "CN", MBSTRING_ASC, (unsigned char*)subject_name, -1, -1, 0);
X509_REQ_set_subject_name(req, name);
X509_REQ_set_pubkey(req, pkey);
X509_NAME_free(name);
EVP_PKEY_free(pkey);
// 签署证书请求
X509_REQ_sign(req, rsa, EVP_sha256());
return req;
}
int main()
{
init_ssl();
// 生成RSA密钥对
RSA* rsa = RSA_generate_key(2048, RSA_F4, NULL, NULL);
// 创建证书请求
X509_REQ* req = create_cert_req(rsa, "CN=Test");
// 将证书请求保存到文件
FILE* fp = fopen("test.csr", "wb");
PEM_write_X509_REQ(fp, req);
fclose(fp);
// 释放内存
RSA_free(rsa);
X509_REQ_free(req);
return 0;
}
```
在上面的示例代码中,我们首先调用了 init_ssl() 函数来初始化GMSSL库。然后,我们使用 RSA_generate_key() 函数生成RSA密钥对,再调用 create_cert_req() 函数创建证书请求。create_cert_req() 函数中,我们首先创建了一个 EVP_PKEY 对象,并将其与 RSA 密钥对关联起来。然后,我们使用 X509_REQ_set_version() 函数设置证书请求版本,使用 X509_REQ_set_subject_name() 函数设置证书请求的主题信息,使用 X509_REQ_set_pubkey() 函数设置证书请求的公钥,并最终使用 X509_REQ_sign() 函数对证书请求进行签名。最后,我们使用 PEM_write_X509_REQ() 函数将证书请求保存到文件。
注意:在使用 GMSSL库 创建证书请求时,需要注意证书请求的主题信息的格式。在上面的示例代码中,我们使用 CN=Test 的格式来设置证书请求的主题信息。
阅读全文