libcurl:获取通过CURLOPT_SSL_VERIFYSTATUS请求的libcurl结果

时间:2019-05-06 14:44:27

标签: libcurl ocsp

使用libcurl,我正在通过使用public partial class TestWindow : Window { public ObservableCollection<ItemType> MyItems { get; set; } public ObservableCollection<string> MyGroups { get; set; } public TestWindow() { InitializeComponent(); MyGroups = new ObservableCollection<string>(); MyGroups.Add("test"); MyGroups.Add("test 2"); MyItems = new ObservableCollection<ItemType>(); MyItems.Add(new ItemType() { Value = "test" }); MyItems.Add(new ItemType() { Value = "test 2" }); MyDataGrid.ItemsSource = MyItems; } } public class ItemType : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string name) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); } protected string _Value = ""; public string Value { get { return _Value; } set { if (_Value != value) { _Value = value; OnPropertyChanged("Value"); } } } } 向启​​用了OCSP装订的服务器发送HTTP请求。

libcurl响应代码0是证书状态验证失败的必要条件,但也不是充分条件。 那么,如何检查请求是否由于证书状态验证失败而失败?

当然,curl的错误缓冲区为请求失败提供了原因,但是我不想在错误缓冲区中搜索是否出现curl的OSCP错误消息。

相反,我想通过设置curl_easy_setopt(<my handle>, CURLOPT_SSL_VERIFYSTATUS, 1L)直接提取我要求的curl信息(因为可能有其他几个curl信息)。

我只是忽略它还是没有直接方法来评估认证状态验证?

1 个答案:

答案 0 :(得分:0)

虽然时间已过去,但我再次遇到需要解决已解决问题的需求,我发现可以解决该问题的一些方法,但对我来说似乎很不合适: 例如,我可以直接检查属于reuqest的SSL对象的OCSP相关数据:

const struct curl_tlssessioninfo* info = NULL;
CURLcode res = curl_easy_getinfo(handle, CURLINFO_TLS_SSL_PTR, &info);
SSL* ssl = (SSL*)info->internals;
// check ssl->tlsext_ocsp_resp

或者我可以像在vtls / openssl.c中的verifystatus函数中的libcurl代码中进行检查一样:

...
long len = SSL_get_tlsext_status_ocsp_resp(BACKEND->handle, &status);
rsp = d2i_OCSP_RESPONSE(NULL, &p, len);
....

对我来说,最好的方法是能够直接在libcurls openssl.c中调用verifystatus函数,但是可能由于很好的原因而无法从“外部”进行访问。

有人知道如何直接访问OCSP响应吗? 对于解决该问题的建议,我也很高兴。