我希望客户端向服务器发送证书。现在,我想使用看起来像这样的代码:
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.
答案 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
)。