Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
加载SSL CA';s来自字符串,而不是来自文件_Ssl_Openssl - Fatal编程技术网

加载SSL CA';s来自字符串,而不是来自文件

加载SSL CA';s来自字符串,而不是来自文件,ssl,openssl,Ssl,Openssl,我希望将CA存储在二进制文件中的字符串中,而不是通过SSL\u CTX\u load\u verify\u位置将其加载,这会占用文件路径和文件夹路径 但是,我找不到一种方法可以让我接受一个字符串。我不知道有一种文档化的方法可以做到这一点。我知道的唯一方法是使用您自己的验证,例如,使用X509_store_CTX_new创建一个存储,使用X509_store_CTX_trusted_堆栈添加受信任的CA,使用X509_store_CTX_set_cert添加一些其他具有类似功能的链证书和CRL,最

我希望将CA存储在二进制文件中的字符串中,而不是通过SSL\u CTX\u load\u verify\u位置将其加载,这会占用文件路径和文件夹路径


但是,我找不到一种方法可以让我接受一个字符串。

我不知道有一种文档化的方法可以做到这一点。我知道的唯一方法是使用您自己的验证,例如,使用X509_store_CTX_new创建一个存储,使用X509_store_CTX_trusted_堆栈添加受信任的CA,使用X509_store_CTX_set_cert添加一些其他具有类似功能的链证书和CRL,最后在X509_store_CTX上调用X509_verify_cert

好的,我知道怎么做了。OpenSSL有很多方法来处理证书的加载,其中许多方法将证书添加到不受信任的链中。您必须同时使用SSL\u CTX\u get\u cert\u store和X509\u store\u add\u cert。这两个函数接受X509指针,这些指针可以从原始c字符串创建。因为这两个函数的文档几乎不存在,所以我想在这里共享代码:

编辑:这基本上是Steffen Ulrich的方法,除了使用X509存储添加证书

#包括
#包括
#包括
无效将证书读取到ctx中(istream&some\u流、SSL\u ctx*ctx){
//将PEM格式的证书字符串流添加到受信任的存储
//ctx的一部分。
弦线;
字符串缓冲区;
while(getline(一些流,行)){
buffer.append(行);
buffer.append(“\n”);
如果(行==“----结束证书------”){
生物*生物;
X509*证书;
bio=bio_new(bio_s_mem());
BIO_put(BIO,buffer.c_str());
证书=PEM_read_bio_X509(bio,NULL,0,NULL);
如果(证书==NULL)
抛出std::runtime_错误(“无法将证书添加到受信任的\
中科院);
X509_STORE*STORE=SSL_CTX_get_cert_STORE(CTX);
int result=X509\存储\添加\证书(存储,证书);
不含生物素(BIO);
缓冲区=”;
}
}
}

这不是个好主意。您希望受信任的CA是可配置的,而不是硬连接到您的代码中。为什么会出现这种情况?是的,查看1.0.1源代码,它看起来不可能。有一些
*\u file
函数,但它们采用文件名。没有一个采用
字符串
字节数组
BIO