Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline byre_vestnik  
#11 Оставлено : 22 октября 2021 г. 10:18:10(UTC)
byre_vestnik

Статус: Участник

Группы: Участники
Зарегистрирован: 08.11.2018(UTC)
Сообщений: 18
Российская Федерация

С другими серверами ошибка аналогичная.

Код улучшения подписей:

Код:
static byte[] Enhance(byte[] signature, string tspUri, CadesType cadesType)
{
	var tspConnectionParamsSize = Marshal.SizeOf<CADES_SERVICE_CONNECTION_PARA>();

	var tspConnectionParams = new CADES_SERVICE_CONNECTION_PARA
	{
		dwSize = (uint)tspConnectionParamsSize,
		wszUri = tspUri
	};

	var tspConnectionParamsPtr = Marshal.AllocHGlobal(tspConnectionParamsSize);
	try
	{
		Marshal.StructureToPtr(tspConnectionParams, tspConnectionParamsPtr, false);

		var signParamsSize = Marshal.SizeOf<CADES_SIGN_PARA>();

		var signParams = new CADES_SIGN_PARA
		{
			dwSize = (uint)signParamsSize,
			dwCadesType = cadesType,
			pTspConnectionPara = tspConnectionParamsPtr
		};

		var signParamsPtr = Marshal.AllocHGlobal(signParamsSize);
		try
		{
			Marshal.StructureToPtr(signParams, signParamsPtr, false);

			var enchanceParams = new CADES_ENHANCE_MESSAGE_PARA
			{
				dwSize = (uint)Marshal.SizeOf<CADES_ENHANCE_MESSAGE_PARA>(),
				dwMsgEncodingType = AsnEncoding.X509_PKCS_7,
				pCadesSignPara = signParamsPtr
			};

			if (!CadesNativeMethods.CadesEnhanceMessageAll(ref enchanceParams, signature, (uint)signature.Length, out var ppEnhancedBlob))
			{
				throw new InvalidOperationException(string.Format("Не удалось усовершенствовать подпись до {0}. Код ошибки: {1}.", cadesType, CadesNativeMethods.GetLastError()));
			}

			try
			{
				var enhancedSignatureBlob = Marshal.PtrToStructure<_CRYPTOAPI_BLOB>(ppEnhancedBlob);
				var enhancedSignature = new byte[enhancedSignatureBlob.cbData];

				Marshal.Copy(enhancedSignatureBlob.pbData, enhancedSignature, 0, enhancedSignature.Length);

				return enhancedSignature;
			}
			finally
			{
				CadesNativeMethods.CadesFreeBlob(ppEnhancedBlob);
			}
		}
		finally
		{
			Marshal.FreeHGlobal(signParamsPtr);
		}
	}
	finally
	{
		Marshal.FreeHGlobal(tspConnectionParamsPtr);
	}
}


CadesNativeMethods:
Код:
internal sealed class CadesNativeMethods
{
	[DllImport("libcades", SetLastError = true)]
	public static extern bool CadesEnhanceMessageAll(
		[In] ref CADES_ENHANCE_MESSAGE_PARA pEnhancePara,
		[In] byte[] pbSignedBlob,
		[In] uint cbSignedBlob,
		[Out] out IntPtr ppEnhancedBlob);

	[DllImport("libcades", SetLastError = true)]
	public static extern bool CadesFreeBlob([In] IntPtr pBlob);

	[DllImport("libcades", SetLastError = false)]
	public static extern int GetLastError();
}


CadesType:
Код:
public enum CadesType : uint
{
    CADES_DEFAULT = 0x00000000,
    CADES_BES = 0x00000001,
    CADES_T = 0x00000005,
    CADES_X_LONG_TYPE_1 = 0x0000005D,
    PKCS7_TYPE = 0x0000ffff
}
Offline byre_vestnik  
#12 Оставлено : 10 ноября 2021 г. 13:08:16(UTC)
byre_vestnik

Статус: Участник

Группы: Участники
Зарегистрирован: 08.11.2018(UTC)
Сообщений: 18
Российская Федерация

Добрый день!

Нужны ли еще какие-нибудь данные? Есть ли идеи по поводу того, что пошло не так?
Offline skgste  
#13 Оставлено : 11 ноября 2021 г. 12:05:59(UTC)
skgste

Статус: Участник

Группы: Участники
Зарегистрирован: 29.04.2020(UTC)
Сообщений: 10
Российская Федерация

Автор: byre_vestnik Перейти к цитате
Добрый день!

Нужны ли еще какие-нибудь данные? Есть ли идеи по поводу того, что пошло не так?


Коллеги, добрый день.

Дополню.
Дошли до установки Wireshark, чтобы посмотреть, а что же там происходит.
А ничего не происходит. :)

Несмотря на наличие в логе "<tsp>MakeRequest", Wireshark не ловит никакого HTTP-трафика (хотя, если из браузера дернуть тот же URI, все прекрасно в логе WSH видно).
Более того, картинка не меняется, если подсунуть невалидный адрес TSP-сервера (потормозить вызов должен при попытке отресолвить имя хоста в адрес) - моментально возвращается тот же код ошибки.

Как понять, _куда именно_ идет запрос (и идет ли на самом деле, т.к. есть подозрение, что никакого запроса никуда не уходит)?

Касательно прокси:
UserPostedImage

Отредактировано пользователем 11 ноября 2021 г. 12:08:54(UTC)  | Причина: Не указана

Offline skgste  
#14 Оставлено : 25 ноября 2021 г. 15:57:20(UTC)
skgste

Статус: Участник

Группы: Участники
Зарегистрирован: 29.04.2020(UTC)
Сообщений: 10
Российская Федерация

Коллеги, добрый день?
Все вымерли?
Вопрос более чем актуален.
Offline Санчир Момолдаев  
#15 Оставлено : 25 ноября 2021 г. 17:43:13(UTC)
Санчир Момолдаев

Статус: Сотрудник

Группы: Модератор, Участники
Зарегистрирован: 03.12.2018(UTC)
Сообщений: 1,038
Российская Федерация

Сказал(а) «Спасибо»: 88 раз
Поблагодарили: 223 раз в 211 постах
Добрый день!

для отладки включите логирование
sudo /opt/cprocsp/sbin/amd64/cpconfig -loglevel сades -mask 0xF
sudo /opt/cprocsp/sbin/amd64/cpconfig -loglevel tsp -mask 0xF
sudo /opt/cprocsp/sbin/amd64/cpconfig -loglevel ocsp -mask 0xF

воспроизведите ошибку.
сообщения будут видны в sudo journalctl -f

вернуть логирование обратно на прежний уровень mask 0x1

приложите лог.
либо создайте обращение на портале техподдержки и приложите там
Техническую поддержку оказываем тут
Наша база знаний
Offline skgste  
#16 Оставлено : 2 декабря 2021 г. 16:28:39(UTC)
skgste

Статус: Участник

Группы: Участники
Зарегистрирован: 29.04.2020(UTC)
Сообщений: 10
Российская Федерация

Добрый день.
Создал обращение 43166 на портале ТП.
Лог приложил, но в нем ничего нового - тот же набор записей, что и в первых сообщениях темы. Тот же HTTP STATUS: 456.
Offline skgste  
#17 Оставлено : 7 декабря 2021 г. 8:57:25(UTC)
skgste

Статус: Участник

Группы: Участники
Зарегистрирован: 29.04.2020(UTC)
Сообщений: 10
Российская Федерация

Санчир, спасибо.
Проблема решена.

Суть в том, что Marshal.StringToHGlobalUni внутри вызывает вот это:
Код:

[System.Security.SecurityCritical]  // auto-generated
internal static unsafe void wstrcpy(char *dmem, char *smem, int charCount)
{
    Buffer.Memcpy((byte*)dmem, (byte*)smem, charCount * 2); // 2 used everywhere instead of sizeof(char)
}

Т.е. ни автоматический маршаллниг с параметрами по умолчанию, если структура объявлена так:
Код:

    [StructLayout(LayoutKind.Sequential)]
    internal struct CADES_SERVICE_CONNECTION_PARA
    {
        public uint dwSize;

        public string wszUri;

        public IntPtr pAuthPara;
    }

ни явный вызов Marshal.StringToHGlobalUni, если структура объявлена вот так:
Код:

    [StructLayout(LayoutKind.Sequential)]
    internal struct CADES_SERVICE_CONNECTION_PARA
    {
        public uint dwSize;

        public IntPtr wszUri;

        public IntPtr pAuthPara;
    }

под Linux не отработает, т.к. имеем захардкоженный UTF-16 вместо требуемого под Linux UTF-32.

В итоге добавили вот такое явное использование UTF-32:
Код:

        public static IntPtr ToHGlobalUni(this string source)
        {
            if (string.IsNullOrEmpty(source))
            {
                return IntPtr.Zero;
            }

            var sourceBytes = Encoding.UTF32.GetBytes(source);

            Array.Resize(ref sourceBytes, sourceBytes.Length + 4);

            var sourceBytesPtr = Marshal.AllocHGlobal(sourceBytes.Length);

            Marshal.Copy(sourceBytes, 0, sourceBytesPtr, sourceBytes.Length);

            return sourceBytesPtr;
        }


Использовать вместе со вторым вариантом объявления структуры, в котором wszUri объявлен как IntPtr.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
2 Страницы<12
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.