Как использовать пользовательский центр сертификации в SharpSvn без установки сертификата

Я пытаюсь получить доступ к репозиторию Subversion, используя SharpSvn. Репозиторий доступен только через https, и машина использует свой собственный частный центр сертификации (здесь не беспокойтесь о безопасности, я доверяю авторитету).

У меня есть общедоступный корневой сертификат центра сертификации, однако из-за прав доступа пользователя я не могу установить сертификат в хранилище сертификатов.

Если я использую subversion напрямую, я могу добавить:

servers:global:ssl-authority-files=/path/to/cacert.crt
servers:groups:myhost=myhostsdns.com

либо как объекты командной строки, либо в файл конфигурации.

Как установить эти параметры в SharpSvn, чтобы я мог использовать файл cacert.crt, чтобы при попытке доступа к моему репозиторию не возникало сообщения «ошибка проверки сертификата», и мне не нужно было просто игнорировать ошибку?

Большое спасибо


person benmichael    schedule 25.07.2012    source источник
comment
Конечно, я решил это только один раз, зарегистрировавшись и опубликовав вопрос. Я решил это, вызвав функцию SvnClient.Configuration.SetOption(). Я опубликую полный ответ и отмечу его как решенный как можно скорее (8 часов ожидания, прежде чем я смогу ответить сам, потому что я здесь новичок)   -  person benmichael    schedule 25.07.2012
comment
Добро пожаловать в Stack Overflow, мы ждали вас. Если бы у вас были права на установку, это решило бы проблему? Я постоянно сталкиваюсь с этим: sharpsvn.open.collab.net /дс/   -  person Jeremy Thompson    schedule 26.07.2012
comment
Я тоже столкнулся с этим во время поиска. Перечисленная проблема связана с самоподписанным сертификатом, который не подписан центром сертификации. Чтобы обойти это, вы должны игнорировать ошибку сбоя или указать svn доверять сертификату. В моей проблеме у меня был сертификат, подписанный ЦС, но ЦС, которому не доверяли. У меня был открытый ключ CA, и я пытался заставить SharpSvn использовать его, поскольку я знаю, что это можно сделать с помощью subversion. Если бы у меня были разрешения на установку в хранилище сертификатов, я мог бы это сделать, и подрывная деятельность заработала бы из коробки. Смотрите мой ответ ниже для решения.   -  person benmichael    schedule 28.07.2012


Ответы (2)


Как получается, что только после того, как вы зададите вопрос, вы поймете ответ?

Я решил это, установив параметры конфигурации объекта SvnClient как таковые:

SvnClient _svnClient = new SvnClient();
_svnClient.Configuration.SetOption("servers", "global", "ssl-authority-files", "/path/to/cacert.crt");
_svnClient.Configuration.SetOption("servers", "groups", "myhost", "myhostsdns.com");

Извиняюсь за самопомощь, надеюсь, это поможет следующему человеку.

person benmichael    schedule 28.07.2012
comment
Другой вариант — принять сертификат, перехватив соответствующие события в объекте _svnClient.Authorization. - person Bert Huijben; 21.08.2012

Расширение комментария Берта Хейбена (выше):

client.Authentication.SslServerTrustHandlers += new EventHandler<SharpSvn.Security.SvnSslServerTrustEventArgs>(Authentication_SslServerTrustHandlers);
void Authentication_SslServerTrustHandlers(object sender, SharpSvn.Security.SvnSslServerTrustEventArgs e)
{
    // Look at the rest of the arguments of E, whether you wish to accept

    // If accept:
    e.AcceptedFailures = e.Failures;
    e.Save = true; // Save acceptance to authentication store
}
person user2173353    schedule 20.06.2013