Comments 4
Спасибо за статью, а сможете выложить код нагрузочного теста — мы посмотрим на предмет дедлока?
И версия 3.9 довольна старая — рекомендую проверить на последней сборке CSP 4.0.
0
fpPath — вариант криптографии OpenSSL/КриптоПро (OpenSSL сейчас подключаем для не ГОСТовых сертификатов).
Данный метод запускался в нескольких потоках
/**<summary>Поток теста</summary>**/
public void CertTest() {
Random pRand = new Random();
CancellationToken pToken = fpTokenSource.Token;
X509Certificate2 pCert1 = null;
X509Certificate2 pCertTemp;
byte[] arData = new byte[] { 1, 2, 3 ,4, 5};
byte[] arSign = new byte[] {};
int iRes;
string sLoc = "";
string sErr = "";
while (!pToken.IsCancellationRequested) {
try {
Thread.Sleep(pRand.Next(10));
// 0) Получаем сертификат
pCert1 = UCUtils.FindCertificate(fsHash, fpPath,
StoreLocation.CurrentUser, StoreName.My,
X509FindType.FindByThumbprint);
if (pCert1 == null) Console.WriteLine("{0}: No Cert", fsPref);
sLoc = "Cert";
// 1) Подписываем
arSign = UCUtils.SignData(arData, pCert1, fpPath);
if (arSign.Length < 1000) Console.WriteLine("{0}: Err Sign", fsPref);
sLoc = "Sign";
// 2) Проверяем подпись
iRes = UCUtils.CheckSign(arData, arSign, out pCertTemp, ref sErr, true, fpPath);
if (iRes != UConsts.S_OK) AddErrCnt();
sLoc = "CheckSign";
// 2.1) Извлекаем инфу
if (UCUtils.GetSignInfo(arSign, fpPath).Count == 0)
Console.WriteLine("{0}: Err Sign Info", fsPref);
sLoc = "SignInfo";
// 3) Шифруем
List<X509Certificate2> pCerts = new List<X509Certificate2>();
pCerts.Add(pCert1);
byte[] arCrypted = UCUtils.EncryptData(arData, pCerts, fpPath);
if (arCrypted.Length == 0) Console.WriteLine("{0}: Err Crypt", fsPref);
sLoc = "Crypt";
// 4) Дешифруем
if (UCUtils.DecryptData(arCrypted, fpPath).Length != 5)
Console.WriteLine("{0}: Err DeCrypt", fsPref);
sLoc = "DeCrypt";
AddCnt();
} catch (Exception E){
Console.WriteLine("{2}: Err Full {0} - {1}", sLoc, E.Message, fsPref);
}
}
}
Данный метод запускался в нескольких потоках
/**<summary>Запуск теста</summary>
* <param name="_iCnt">Количество потоков</param>
* **/
public void Start(int _iCnt) {
rStart = DateTime.Now;
for (int i = 0; i < _iCnt; i++) {
new Thread(CertTest).Start();
}
}
При 10 потоках вставало после суммарно 120к-160к циклов.
При 50 потоках иногда не доходило и до 30к.
4-ую версию попробуем.
0
Спасибо, посмотрим.
Кстати, в CSP 5.0 мы начали реализовывать зарубежную криптографию — возможно вам будет удобнее воспользоваться им, а не OpenSSL?
0
Учитывая что альтернатива это OpenSSL, то наверняка будет удобнее. Но пока на 5.0 версию вроде нет сертификата, поэтому целиком перейти на нее не получится. Так что видимо пока придется работать с двумя системами сразу — ГОСТовые через сертифицированный CSP 3.9 или 4, а все остальные через OpenSSL.
0
Sign up to leave a comment.
Подключение КриптоПро в Mono