openSSL:如何创建CAfile

时间:2015-01-20 09:57:02

标签: c sockets networking ssl openssl

我希望客户端向服务器发送证书。现在,我想使用看起来像这样的代码:

   SSL_CTX *ctx;
   STACK_OF(X509_NAME) *cert_names;
   ... 
   cert_names = SSL_load_client_CA_file("/path/to/CAfile.pem");
   if (cert_names != NULL)
       SSL_CTX_set_client_CA_list(ctx, cert_names);
   else
       error_handling();
   ...

但是如何创建CAfile?另外,如果我只想指定一个特定的CA,我会用什么命令发送它?

我已阅读SSL_CTX_set_client_CA_list(SSL_CTX *ctx,STACK_OF(X509_NAME) *list);,但我不知道如何获取*list参数。在这种情况下,我只有1个单一的CA.

2 个答案:

答案 0 :(得分:2)

您可以使用以下命令

创建自己的自签名CA文件

openssl req -out CA.pem -new -x509

这将生成相同的CA.pem文件和私钥。

稍后您可以从生成的CA.pem和私钥创建证书文件和密钥。

生成服务器证书和密钥:

openssl genrsa -out server.key 1024

openssl req -key server.key -new -out server.req

openssl x509 -req -in server.req -CA CA.pem -CAkey privkey.pem -CAserial file.srl -out server.pem

同样,您可以为客户创建证书和密钥。

答案 1 :(得分:1)

通常你会做类似的事情:

SSL_CTX_set_client_CA_list(CTX, SSL_load_client_CA_file("/path/to/cacert.crt"));

我不太确定“我如何创建CA文件”的含义。 CA证书是已签署客户端证书的证书颁发机构的公共证书。要么你签了它(在这种情况下你必须是CA并且有证书),或者第三方做了,在这种情况下它将在你的系统上的可信证书列表中(例如,在Ubuntu上,它在/etc/ssl/certs)。