Форум КриптоПро
»
Устаревшие продукты
»
КриптоПро CSP 3.6
»
CryptoPro 3.6 x64 (beta Август,15) и Windows Server 2003 x64 SP2 RC2
Статус: Участник
Группы: Участники
Зарегистрирован: 23.09.2008(UTC) Сообщений: 20 Откуда: Н.Новгород
|
Есть примитивное приложение: Код:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
try
{
MessageBox.Show(Send(new System.Uri(@"https://172.16.1.3:10000/testResponse.asp"), "HELLO", ChoiceCert()[0], Encoding.Default));
}
catch (System.Exception e)
{
MessageBox.Show(e.Message);
MessageBox.Show(e.StackTrace);
}
}
public X509Certificate2Collection ChoiceCert()
{
X509Store store = new X509Store("MY", StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadWrite);
X509Certificate2Collection storecollection = store.Certificates;
X509Certificate2Collection certInspCol = X509Certificate2UI.SelectFromCollection(storecollection,
"Choice cert",
"Choice cert",
X509SelectionFlag.SingleSelection);
X509Certificate2Enumerator en = certInspCol.GetEnumerator();
en.Reset();
if (!en.MoveNext()) return null;
return certInspCol;
}
public static string Send(Uri uri, string question, X509Certificate clientCertificate, Encoding encoding)
{
if (null == uri)
throw new ArgumentNullException("uri");
string answer;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.ProtocolVersion = new Version(1, 0);
if (null != clientCertificate)
request.ClientCertificates.Add(clientCertificate);
//ServicePointManager.CertificatePolicy = new MyCertificateValidation();
if (!string.IsNullOrEmpty(question))
{
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
StreamWriter streamWriter = null;
try
{
Stream reqStream = request.GetRequestStream();
streamWriter = new StreamWriter(reqStream, encoding);
streamWriter.Write(question);
}
finally
{
if (null != streamWriter)
streamWriter.Close();
}
}
WebResponse response = request.GetResponse();
StreamReader streamReader = null;
try
{
streamReader = new StreamReader(response.GetResponseStream(), encoding);
answer = streamReader.ReadToEnd();
}
finally
{
if (null != streamReader)
streamReader.Close();
}
return answer;
}
}
Которое открывает примитивную страницу: (testResponse.asp) Код:
<%@ EnableSessionState="False" Language = "JScript" CODEPAGE="1251" %>
<%
Response.Write("OK");
%>
Сертификат сервера и клиента "не-крипто-прошные", а "виндюковые". Если на сервере установлена указанная выше версия крипто-про, то при выполнении приложения возникает исключение , которое не ловиться cath'ем . Звучит оно так: Managed Debugging Assistant 'FatalExecutionEngineError' has detected a problem in 'C:\TaxSSL\TestConnection\bin\Debug\TestConnection.vshost.exe'. Additional Information: The runtime has encountered a fatal error. The address of the error was at 0x79e754f3, on thread 0xf3c. The error code is 0xc0000005. This error may be a bug in the CLR or in the unsafe or non-verifiable portions of user code. Common sources of this bug include user marshaling errors for COM-interop or PInvoke, which may corrupt the stack. Сношу крипто-про из установки и удалении программ - всё начинает работать и я получаю вожделенный "ОК" в респонсе. Ставлю заново - снова получаю Exception. Exception возникает в строчке Код:WebResponse response = request.GetResponse();
Причём выяснено что проблема именно в клиенте. Так как если всё это проделывать не на сервере с ИИСом (6.0), а на машине рядом - то суть такая: 1. Если на клиенте 3.6. бета и система x64 - то такой же эксепшен. 2. Если на клиенте 3.0. и система x32 - то всё отлично. Очень печалит. Added: В эксплорере страница отлично запрашивает сертификат и открывается. Т.е. проблема конкрентно в этом .нетовском GetResponse. Отредактировано пользователем 24 сентября 2008 г. 0:01:19(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,391 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 715 раз в 620 постах
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,391 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 715 раз в 620 постах
|
Какая версия CSP 3.6? На текущей сборке не воспроизводится. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 23.09.2008(UTC) Сообщений: 20 Откуда: Н.Новгород
|
Версия продукта: 3.6.5009 Версия крипто-графического ядра (СКЗИ) : КС2 3.6.4070 Операционка: Windows 2003 Server SP2 RC2 x64 Нашел еще одну проблему: Код:
BOOL SecurityAPI::GetSignatureB64(PCCERT_CONTEXT pSignerCert,
_bstr_t ClearText,_bstr_t* SignB64 )
{
cLog.Add("Вход GetSignatureB64");
_bstr_t res="";
BYTE* pbMessage=(BYTE*)(char*)ClearText;
DWORD cbMessage=ClearText.length();
BYTE* pbSignedMessageBlob;
DWORD cbSignedMessageBlob;
DWORD cbDecodedMessageBlob=0;
BYTE *pbDecodedMessageBlob=0;
CRYPT_SIGN_MESSAGE_PARA SigParams;
// CRYPT_VERIFY_MESSAGE_PARA VerifyParams;
// Create the MessageArray and the MessageSizeArray.
const BYTE* MessageArray[] = {pbMessage};
DWORD MessageSizeArray[1];
MessageSizeArray[0] = cbMessage;
memset(&SigParams, 0, sizeof(CRYPT_SIGN_MESSAGE_PARA));
SigParams.cbSize = sizeof(CRYPT_SIGN_MESSAGE_PARA);
SigParams.dwMsgEncodingType = PKCS_7_ASN_ENCODING | X509_ASN_ENCODING;
SigParams.pSigningCert = pSignerCert;
//SigParams.HashAlgorithm.pszObjId = szOID_CP_GOST_R3411_R3410;//szOID_RSA_MD5 //szOID_RSA_SHA1RSA;
//SigParams.HashAlgorithm.Parameters.cbData=NULL;
SigParams.HashAlgorithm.pszObjId=szOID_RSA_SHA1RSA;//pSignerCert->pCertInfo->SignatureAlgorithm.pszObjId;
SigParams.HashAlgorithm.Parameters.cbData = NULL;
SigParams.cMsgCert = 1;
SigParams.rgpMsgCert = &pSignerCert;
SigParams.cAuthAttr = 0;
SigParams.dwInnerContentType = 0;
SigParams.cMsgCrl = 0;
SigParams.cUnauthAttr = 0;
SigParams.dwFlags = 0;
SigParams.pvHashAuxInfo = NULL;
SigParams.rgAuthAttr = NULL;
//--------------------------------------------------------------------
// With two calls to CryptSignMessage, sign the message.
// First, get the size of the output signed BLOB.
if(CryptSignMessage(
&SigParams, // Signature parameters
TRUE, // Not detached
1, // Number of messages
MessageArray, // Messages to be signed
MessageSizeArray, // Size of messages
NULL, // Buffer for signed message
&cbSignedMessageBlob)) // Size of buffer
{
printf("The size of the BLOB is %d.\n",cbSignedMessageBlob);
}
else
{
DWORD dwLE=GetLastError();
LastError="Getting signed BLOB size failed ERRID="+_bstr_t(dwLE)+" HashAlgorithm="+_bstr_t(SigParams.HashAlgorithm.pszObjId);
cLog.Add("Getting signed BLOB size failed ERRID="+_bstr_t(dwLE)+" HashAlgorithm="+_bstr_t(SigParams.HashAlgorithm.pszObjId));//+dwLE);
return FALSE;
//MyGetError("Getting signed BLOB size failed");
}
Без Крипто-Про на машине или с Крипто-Про 3.6 более ранних сборок - всё работало вот так: SigParams.HashAlgorithm.pszObjId=pSignerCert->pCertInfo->SignatureAlgorithm.pszObjId; Сертификаты которые использовались имели HashAlgorithm=szOID_RSA_SHA1RSA. С текущей сборкой работает ТОЛЬКО если я принудительно ставлю SigParams.HashAlgorithm.pszObjId=szOID_RSA_MD5; в остальных случаях GetLastError = 2148077570 (szOID_CP_GOST_R3411_R3410 - кстати тоже не работает).
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 23.09.2008(UTC) Сообщений: 20 Откуда: Н.Новгород
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,391 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 715 раз в 620 постах
|
//SigParams.HashAlgorithm.pszObjId = szOID_CP_GOST_R3411_R3410 - разве это алгоритм хэширования? Да, и доступна новая сборка 3.6. Были некие проблемы с подписью на х64 (пришлось исправлять ошибки MS) Отредактировано пользователем 27 ноября 2008 г. 23:47:19(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 23.09.2008(UTC) Сообщений: 20 Откуда: Н.Новгород
|
Попробовал новую сборку. SigParams.HashAlgorithm.pszObjId=szOID_RSA_SHA1RSA; Ошибка осталась Хотя на самом деле мне хочеться шоб тут было вот так SigParams.HashAlgorithm.pszObjId=pSignerCert->pCertInfo->SignatureAlgorithm.pszObjId; Отредактировано пользователем 28 ноября 2008 г. 20:23:53(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,391 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 715 раз в 620 постах
|
еще раз повторяю - это НЕ алгоритм хэширования, а алгоритм подписи. А если хочется - то реализуйте собственное API. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 23.09.2008(UTC) Сообщений: 20 Откуда: Н.Новгород
|
Проблема в том, что я не использую гостовские сертификаты. НО!!! Если на машине 2003 x64 стоит 3.6. крипто - про - то всё перестаёт работать. По поводу - не алгоритм хеширования - szOID_RSA_SHA1RSA -вот это тоже не он? Тогда почему без крипто-про 3.6. - это прекрасно работает? И с крипто-про 3.0 - это прекрасно работает. Даже со старой сборкой 3.6. - это тоже прекрасно работает. Стоит поставить новую сборку - не работает. Вот этот пример с установленной 3.6. крипто-про работать не будет. Сертификаты не гостовские. Сносим крипто-про 3.6 - всё работает. http://msdn.microsoft.co...ary/aa904939(VS.85).aspxУ меня ПО - вообще не привязано ни коим местом к вашему АПИ. Но хочецца шоб и с ним оно тоже могло работать. Отредактировано пользователем 28 ноября 2008 г. 22:34:34(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,391 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 715 раз в 620 постах
|
szOID_RSA_SHA1RSA - это алгоритм подписи хэш - sha1, ключ - RSA Про неработоспособность - посмотрим. |
|
|
|
|
Форум КриптоПро
»
Устаревшие продукты
»
КриптоПро CSP 3.6
»
CryptoPro 3.6 x64 (beta Август,15) и Windows Server 2003 x64 SP2 RC2
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close