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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Гаскаров2  
#1 Оставлено : 14 июня 2016 г. 12:44:56(UTC)
Гаскаров2

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

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

Сказал(а) «Спасибо»: 2 раз
Добрый день.
Пробую реализовать проверку подписи в 1с используя .NET и c#.
Подпись считывается и проверяется, только моя самодельная подпись тоже проходит проверку. Как сделать чтобы проверку проходили только подписи, которые выданы УЦ?
Спасибо.

Вот то что я насобирал в интернете и вставил в свою проверку:

Код:

	СертификатПослеПроверки = Неопределено;
	Если ЗначениеЗаполнено(Файл) Тогда
		ДДФайл = Новый ДвоичныеДанные(Файл);
		ФФайл = Новый Файл(Файл);
		Попытка
			Врап = Новый COMОбъект("NetObjectToIDispatch45");
			PackageZIP = Врап.ПолучитьТипИзСборки("System.IO.Packaging.Package","WindowsBase.dll");
			ServicePointManager=Врап.ПолучитьТипИзСборки("System.Net.ServicePointManager","System.dll");
			package = Врап.ПолучитьТип("System.IO.Packaging.Package").Open(Файл);
			PackageDigitalSignatureManager = Врап.ПолучитьТипИзСборки("System.IO.Packaging.PackageDigitalSignatureManager","WindowsBase.dll");
			dsm = Врап.СоздатьОбъект(PackageDigitalSignatureManager, package);
			Если НЕ dsm.IsSigned Тогда
				Сообщить("Файл " + Файл + " не содержит подписи");
			КонецЕсли; 
			Для каждого pds Из dsm.Signatures Цикл
				Сертификат2 = Врап.СоздатьОбъект("System.Security.Cryptography.X509Certificates.X509Certificate2", pds.Signer);
				Результат = dsm.VerifySignatures(true);
				Если Результат.Equals(Врап.ПолучитьТип("System.IO.Packaging.VerifyResult").Success) Тогда
					Сообщить("Проверка подписи прошла успешно");   
				Иначе
					Сообщить("Подпись не прошла проверку");  
				КонецЕсли;
				
				Если pds.Signer.Verify() Тогда
					Сообщить("Сертификат действителен");
				Иначе
					Сообщить("Сертификат недействителен.");
				КонецЕсли; 
				
				Результат2= PackageDigitalSignatureManager.VerifyCertificate(Сертификат2);
				Сообщить("Ошибки: " + Врап.Встроку(Результат2));
				
				chain = Врап.СоздатьОбъект("System.Security.Cryptography.X509Certificates.X509Chain");
				chain.ChainPolicy.ExtraStore.Add(Сертификат2);// GetYourRootCert() - Ваш корневой X509Certificate2  
				Если chain.Build(pds.Signer) Тогда
					Сообщить("сертификат загружен");
				Иначе
					Сообщить("сертификат не загружен");
				КонецЕсли;
				
				//////////////// читаем данные сертификата     				
				
				//ServicePointManager.UseNagleAlgorithm = True;
				//ServicePointManager.Expect100Continue = True;
				ServicePointManager.CheckCertificateRevocationList = True;
				//ServicePointManager.DefaultConnectionLimit = ServicePointManager.DefaultPersistentConnectionLimit;
				
				chain.ChainPolicy.VerificationFlags = Врап.ПолучитьТип("System.Security.Cryptography.X509Certificates.X509VerificationFlags").AllowUnknownCertificateAuthority;// AllFlags;
				
				X509VerificationFlags=Врап.ПолучитьТип("System.Security.Cryptography.X509Certificates.X509VerificationFlags");				
				chain.ChainPolicy.VerificationFlags =врап.OR(X509VerificationFlags.NoFlag);
				
				chain.ChainPolicy.RevocationMode = Врап.ПолучитьТип("System.Security.Cryptography.X509Certificates.X509RevocationMode").Online;
				chain.ChainPolicy.RevocationFlag = Врап.ПолучитьТип("System.Security.Cryptography.X509Certificates.X509RevocationFlag").EntireChain;
				X509ChainStatusFlags = Врап.ПолучитьТип("System.Security.Cryptography.X509Certificates.X509ChainStatusFlags");
				chain.ChainPolicy.VerificationTime = pds.SigningTime;
//				TimeSpan = Врап.ПолучитьТип("System.TimeSpan", 30); 
				chain.ChainPolicy.UrlRetrievalTimeout = Врап.СоздатьОбъект("System.TimeSpan",0, 0, 30);				
				//chain.ChainPolicy.X509ChainStatusFlags
				String = Врап.ПолучитьТип("System.String");
				
				//Врап.ПолучитьТип("System.Security.ServicePoint").true;
				Сообщить(String.Format("Chain revocation flag: {0}" , 			chain.ChainPolicy.RevocationFlag, 			0));
				Сообщить(String.Format("Chain revocation mode: {0}", 			chain.ChainPolicy.RevocationMode,			0));
				Сообщить(String.Format("Chain verification flag: {0}", 			chain.ChainPolicy.VerificationFlags,		0));
				Сообщить(String.Format("Chain verification time: {0}", 			chain.ChainPolicy.VerificationTime,			0));
				Сообщить(String.Format("Chain application policy count: {0}", 	chain.ChainPolicy.ApplicationPolicy.Count,	0));
				Сообщить(String.Format("Chain certificate policy count: {0}",	chain.ChainPolicy.CertificatePolicy.Count,	0)); 	
				                 
				Если chain.Build(Сертификат2) Тогда
					Сообщить("сертификат загружен");
				Иначе
					Сообщить("сертификат не загружен");
				КонецЕсли;
				
				
				Действителен = Сертификат2.Verify();
				Если Действителен Тогда
					Сообщить("Сертификат действителен");
				Иначе
					Сообщить("Сертификат недействителен.");
				КонецЕсли; 
			КонецЦикла; 
		Исключение
		КонецПопытки;    
		Попытка
			Врап.ЗакрытьРесурс(package);
		Исключение
			Сообщить("Закрыть не удалось");
		КонецПопытки;	
	КонецЕсли;
Offline Гаскаров2  
#2 Оставлено : 16 июня 2016 г. 12:29:24(UTC)
Гаскаров2

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

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

Сказал(а) «Спасибо»: 2 раз
Может есть решение написанное на другом языке? Я бы попробовал адаптировать под 1с.
Offline Гаскаров2  
#3 Оставлено : 16 июня 2016 г. 14:33:03(UTC)
Гаскаров2

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

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

Сказал(а) «Спасибо»: 2 раз
Вот сертификат, который я сам сгенерировал. Этот сертификат я пробую импортировать через КриптоАРМ, в процессе импорта КриптоАРМ говорит о том, что сертификат действителен. Почему? Сертификат ведь левый, выдан не УЦ.
Sertifikat Al'bert.zip (1kb) загружен 4 раз(а).
Offline Kirill Sobolev  
#4 Оставлено : 16 июня 2016 г. 14:36:24(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Проверьте наличие этого сертификата в хранилищах "Доверенные корневые ЦС" пользователя и компьютера.
Если он там есть, то он будет считаться доверенным издателем, как и УЦ.
Техническую поддержку оказываем тут
Наша база знаний
Offline Гаскаров2  
#5 Оставлено : 16 июня 2016 г. 14:43:48(UTC)
Гаскаров2

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

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

Сказал(а) «Спасибо»: 2 раз
Автор: Kirill Sobolev Перейти к цитате
Проверьте наличие этого сертификата в хранилищах "Доверенные корневые ЦС" пользователя и компьютера.
Если он там есть, то он будет считаться доверенным издателем, как и УЦ.


Смотрел через Панель управления - Свойства браузера. Сертификата ни на одной вкладке нет. Там также нет разделение на хранилище пользователь и компьютер.
Offline Kirill Sobolev  
#6 Оставлено : 16 июня 2016 г. 15:20:18(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
А в стандартном окне просмотра сертификата Windows он отображается как действительный?
Техническую поддержку оказываем тут
Наша база знаний
Offline Гаскаров2  
#7 Оставлено : 16 июня 2016 г. 15:35:10(UTC)
Гаскаров2

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

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

Сказал(а) «Спасибо»: 2 раз
Автор: Kirill Sobolev Перейти к цитате
А в стандартном окне просмотра сертификата Windows он отображается как действительный?

да, действительный.
Skrin Sertifikata Al'bert.jpg (62kb) загружен 5 раз(а).
Offline Kirill Sobolev  
#8 Оставлено : 16 июня 2016 г. 16:07:14(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Проверяйте хранилища, только не через IE, а через оснастку "Сертификаты".
Техническую поддержку оказываем тут
Наша база знаний
Offline Гаскаров2  
#9 Оставлено : 17 июня 2016 г. 7:35:03(UTC)
Гаскаров2

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

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

Сказал(а) «Спасибо»: 2 раз
Нашел где сидел сертификат, он был в "Доверенные лица". Как только я оттуда удалил, обработка показала что сертификат недействителен. Спасибо.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.