加载SSL CA';s来自字符串,而不是来自文件
我希望将CA存储在二进制文件中的字符串中,而不是通过SSL\u CTX\u load\u verify\u位置将其加载,这会占用文件路径和文件夹路径加载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,最
但是,我找不到一种方法可以让我接受一个字符串。我不知道有一种文档化的方法可以做到这一点。我知道的唯一方法是使用您自己的验证,例如,使用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
。