Самый быстрый способ обойти ошибку - добавить параметр -k где-нибудь в вашем запросе на завивание. Этот параметр «позволяет подключаться к SSL-ссылкам без сертификатов». (from curl --help)
Имейте в виду, что это может означать, что вы не разговариваете с конечной точкой, о которой вы думаете, так как они представляют сертификат, не подписанный CA, которому вы доверяете.
Например:
$ curl -o /usr/bin/apt-cyg https://raw.github.com/cfg/apt-cyg/master/apt-cyg
дал мне следующий ответ об ошибке:
curl: (77) error setting certificate verify locations:
CAfile: /usr/ssl/certs/ca-bundle.crt
CApath: none
Я добавил в -k:
curl -o /usr/bin/apt-cyg https://raw.github.com/cfg/apt-cyg/master/apt-cyg -k
и сообщение об ошибке. В качестве бонуса теперь у меня установлен apt-cyg. И ca-сертификаты.
Я подозреваю, что вы получаете обратный вызов компонента пользовательского интерфейса из фонового потока. Я рекомендую выполнить этот вызов с помощью BackgroundWorker, поскольку он поддерживает потоки пользовательского интерфейса.
Для BackgroundWorker основная программа должна быть помечена как [STAThread].
Если вы выполняете вызов из основного потока, вы должны добавить атрибут STAThread к методу Main, как указано в предыдущем ответе.
Если вы используете отдельный поток, он должен быть в STA (однопоточном подразделении), чего нельзя сказать о фоновых рабочих потоках. Вы должны создать поток самостоятельно, например:
Thread t = new Thread(ThreadProc);
t.SetApartmentState(ApartmentState.STA);
t.Start();
где ThreadProc является делегатом типа ThreadStart.