Используя клиентский сертификат не в хранилище сертификатов

Вы могли всегда использовать управление версиями, как SVN, таким образом, все, что необходимо сделать, имеют сервер увеличенный svn на папке каждую ночь. Это сталкивается с проблемами безопасности, если Вы совместно используете свои файлы публично, но это работает.

при использовании Linux, хотя, учитесь использовать rsync. Это действительно не настолько трудно, поскольку можно протестировать каждую команду с-n. Пройдите страница справочника , основной формат, который Вы захотите,

rsync [ОПЦИЯ...] SRC... [USER@] HOST:DEST

команда, которую я выполняю со своего школьного сервера на мою домашнюю резервную машину, это

, rsync-avi - удаляют ~ me@homeserv: ~/School/>> BackupLog.txt

Это берет все файлы в моем корневом каталоге (~) и использует режим архивирования rsync (-a), verbosly (-v), списки весь сделанный (-i) изменений, при удалении любых файлов, которые больше не существуют (-удаляют), и помещает в Папку,/home/me/School/на моем удаленном сервере. Вся информация, которую это распечатывает (что было скопировано, что было удалено, и т.д.) также добавляется в файл BackupLog.txt

, я знаю, что это - ураганный тур по rsync, но я надеюсь, что это помогает.

16
задан nothrow 29 October 2009 в 16:20
поделиться

4 ответа

Какой тип файла - это PathToCertificate? Если это просто файл .cer, он не будет содержать закрытый ключ для сертификата, и попытка использовать этот сертификат для SSL / TLS завершится неудачно.

Однако, если у вас есть файл PKCS7 или PKCS12, который включает общедоступный и частный ключ для сертификата, ваш код будет работать (вам может потребоваться перегрузка, которая принимает пароль, если он есть у закрытого ключа).

Чтобы проверить это, я пошел на http: //www.mono- project.com/UsingClientCertificatesWithXSP и создал мой файл client.p12, следуя этим инструкциям. Я также создал простой HTTPS-сервер, используя HttpListener для тестирования.

Затем я скомпилировал следующую программу в client.exe и запустил ее так:

 client.exe https://<MYSSLSERVER>/ client.p12 password

где client.p12 - это файл PKCS12, сгенерированный ранее, и «пароль»

25
ответ дан 30 November 2019 в 17:52
поделиться

Потенциальная проблема может заключаться в кэшировании сеансов SSL (кэш Schannel). Только первый запрос согласовывает рукопожатие SSL. Последующие запросы будут использовать тот же идентификатор сеанса и надеяться, что сервер его примет. Если сервер очищает SessionId, запросы завершатся ошибкой 403. Чтобы отключить кеширование локального ssl-сеанса (и принудительно согласовать SSL для каждого запроса), вам необходимо открыть папку реестра Windows:

[HKEY_LOCAL_MACHINE] [System] [CurrentControlSet] [Control] [SecurityProviders] [SCHANNEL]

и добавьте ключ с именем ClientCacheTime (DWORD) со значением 0.

Эта проблема описана здесь:

http : //support.microsoft.com/? id = 247658

2
ответ дан 30 November 2019 в 17:52
поделиться

Вам нужен пароль для сертификата? Если да, то в конструкторе есть поле для него.

X509Certificate cert = new X509Certificate(PathToCertificate,YourPassword);
1
ответ дан 30 November 2019 в 17:52
поделиться

You have the potential for at least two problems...

First...

Your client certificate file cannot contain a private key unless it's accessed with a password. You should be using a PKCS #12 (*.pfx) certificate with a password so that your client has access to the private key. You client code will have to provide the password when opening the certificate as others have already posted. There are several ways to create this, the easiest is to use the following command-line to first generate the certificate, then use the MMC certificate manager to export the certificates private key:

Process p = Process.Start(
    "makecert.exe",
    String.Join(" ", new string[] {
        "-r",//                     Create a self signed certificate
        "-pe",//                    Mark generated private key as exportable
        "-n", "CN=" + myHostName,// Certificate subject X500 name (eg: CN=Fred Dews)
        "-b", "01/01/2000",//       Start of the validity period; default to now.
        "-e", "01/01/2036",//       End of validity period; defaults to 2039
        "-eku",//                   Comma separated enhanced key usage OIDs
        "1.3.6.1.5.5.7.3.1," +//    Server Authentication (1.3.6.1.5.5.7.3.1)
        "1.3.6.1.5.5.7.3.2", //     Client Authentication (1.3.6.1.5.5.7.3.2)
        "-ss", "my",//              Subject's certificate store name that stores the output certificate
        "-sr", "LocalMachine",//    Subject's certificate store location.
        "-sky", "exchange",//       Subject key type <signature|exchange|<integer>>.
        "-sp",//                    Subject's CryptoAPI provider's name
        "Microsoft RSA SChannel Cryptographic Provider",
        "-sy", "12",//              Subject's CryptoAPI provider's type
        myHostName + ".cer"//       [outputCertificateFile]
    })
);

Second...

Your next problem is going to be server-side. The server has to allow this certificate. You have the right logic, but on the wrong side of the wire, move this line to the web server handling the request. If you cannot, you must then take the '.cer' file saved above to the server and add it to the server computer's trust list:

ServicePointManager.ServerCertificateValidationCallback = (a,b,c,d) => true;
2
ответ дан 30 November 2019 в 17:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: