Showing posts with label How-To. Show all posts
Showing posts with label How-To. Show all posts

Thursday, November 20, 2014

Шпаргалка по certutil

certutil - отличный инструмент, но с одной проблемой - у него как и у openssl куча параметров, которые знать/помнить невозможно, особенно в условиях, когда этим пользоваться часто нет необходимости, поэтому привожу наиболее часто используемые из собственной практики.

1. Посмотреть сертификаты в хранилище сервера. Это то же самое что видно в ветке peronal оснастки Certificates/Local Computer.
Certutil –store My
Любопытно, что там есть сертификаты у DC, которые аутентифицируют клиентов по токену (нужен для возможности подключения к CA для аутентификации), но там нет сертификатов у прочих серверов, которые также могут аутентифицировать клиентов по сертификату. 


2. Посмотреть сертификаты, хранимые в AD. Там хранятся сертификаты самих удостоверяющих центров.
Certutil -store -enterprise NTAuth
Для логона по смарткартам в этом сторе должны лежать сертификаты УЦ, выдающих сертификаты на смарткарты. NTAuth живет в AD, и на каомпьютеры домена распространяется групповой политикой. Если на компьютере не будет корректной копии NTAuth, вход по смарткарте на него будет невозможен.

3. Проверить, что сертификат проверяем по CRL (Certificate Revocation List) по CDP (CRL distribution point) указанным в сертификате.
Certutil –verify -urlfetch –v certificate.cer, где certificate.cer - имя файла, куда экспортирован сертификат.
Команда может использоваться как для проверки сертификатов пользователей, так и для проверки сертификатов компьютеров).


4. То же самое, что и п.1, но графическая:
Certutil –viewstore My

5. Запрос можно сгенерить вручную, вручную отнести на CA и получить на него сертификат. Команды приводить не буду (так как ни разу пока не делал, но приведу, где почитать, ибо был в двух шагах от этой необходимости, материал может пригодиться)
 - Ответ товарища Valergo на форуме: http://social.technet.microsoft.com/Forums/ru-RU/windowsserverru/thread/69a887f0-8719-4a22-bde8-728d2d38d117/#a4f1dc1c-4f54-43d5-aed6-265b315e2e36
 - Статья в TechNet: http://technet.microsoft.com/ru-ru/library/cc783835%28WS.10%29.aspx

6. Проверить, что по URL в CDP можно вытащить CRL.
Графически: Certutil –url certname.cer и нажать кнопку Retrieve.
Текстово, вывод лучше отправить в файл: Certutil –v –verify –urlfetch certname.cer >c:\certcheck.txt

7. Работа с криптопровайдером (CSP - Crypto service provider):
Certutil /scinfo   - информация о текущем.
Certutil -csplist  - список всех.
Certutil -csptest "cspname" (например: Certutil -csptest "Microsoft Strong Cryptographic Provider") - информация конкретном CSP.

8. Посмотреть мои сертификаты:
certutil -store -user my > my.txt
Экспорт в PFX (PKCS#12):
certutil -p test -user -exportPFX 0123456788e8cb1a18e cert.pfx В качестве параметров указывается серийник и пароль (через -p)
Импорт:
certutil -p test -user -importpfx cert.pfx

9. Хорошая помщь по certreq: http://support.microsoft.com/kb/931351
(см. раздел "How to use the Certreq.exe utility to create and submit a certificate request that includes a SAN" в конце статьи).
Официальная помощь: http://technet.microsoft.com/en-us/library/cc736326%28WS.10%29.aspx
certreq -new hrctforms.inf hrctforms.reqcertreq -submit -config "SERVER_NAME\CA NAME" hrctforms.req hrctforms.cer ,

где "SERVER_NAME\CA NAME" - название УЦ с именем сервера.

Простейший варинт файла .inf:
[Version]

Signature="$Windows NT$

[NewRequest]
Subject = "E=hrctforms@tnk-bp.com,CN=hrctforms,OU=TBInform,O=TNK-BP,L=Moscow,S=Moscow,C=RU"
Exportable = TRUE
KeyLength = 1024
ProviderName = "Microsoft Enhanced Cryptographic Provider v1.0"
   
[RequestAttributes]
CertificateTemplate = SMIMEforServices

10. Резервное копирование ключей УЦ:
certutil –backupKey 11. certutil -pulseЗапустить autoenrollment.


12. certutil -getkey - извлекает из УЦ зашифрованный ключом Агента восстановления (KRA - Key recovery agent) BLOB депонированного ключа. Команду следует запускать от пользователя с правами администратора на УЦ. определяет какие ключи доставать. Это может быть имя пользователя или серийный номер сертификата. определяет имя выходного файла. Пример:
certutil -getkey 40a2c77f0001000000fc data.blb, где
40a2c77f0001000000fc - серийный номер сертификата, ключ которого надо восстановить.

13. certutil -recoverkey - расшифровывает BLOB и восстанавливает депонированный ключ в PKCS#12 (файл с расширением .pfx). Команда должна выполняться от пользователя в профиле которого есть сертификат Агента восстановления с секретным ключом.  Если ошибок не было, то команда спросит пароль для шифрования PFX-файла, который будет записан в . Продолжим пример п.12:
certutil -recoverkey data.blb username.pfx



Официальный справочник параметров certutil: https://technet.microsoft.com/en-us/library/cc732443(v=ws.11).aspx


Thursday, October 23, 2014

Простой обход контентной фильтрации

В целом, примерно то же самое когда-то писал Илья, однако там написано как-то сложно и я так и не понял как в конец одного файла записать другой :-)... Позволю себе эти моменты немного прояснить.

Пусть у нас есть два файла: 1.7z - архив 7-zip, который очень надо запостить в Интернет, а система контентной фильтрации не пускает; 2.JPG - картинка, которую система контентной фильтрации пускает, однако постить конкретно ее в Интернет нет необходимости.

Проблема решается с помощью команды cat. 
c:\>cat 2.JPG 1.7z >3.JPG

Получившийся 3.JPG - обычный графический файл, который можно открыть любой смотрелкой картинок. Будучи картинкой он прекрасно проходит через систему контентной фильтрации.

Однако, если этот 3.JPG переименовать в 3.7z, последний прекрасно откроется архиватором... 

Объясняется этот эффект тем, что начало анализируемого файла соответствует формату файла JPEG, и система контентной фильтрации, убедившись, что передаваемый файл является JPEG-ом не пытается дальше проверять, что этот же файл является архивом 7-zip - в целом, это в большинстве случаев логичное поведение, обеспечивающее разумный компромисс между качеством и скоростью проверки - поэтому претензий к системе контентной фильтрации никаких нет.

Sunday, July 13, 2014

Простейший способ отключения McAfee VirusScan

Иногда есть потребность поработать с различного рода инструментами, а антивирус мешает.
Первая мысль - пойти в Сервисы и отключить сервис "McAfee McShield" - если верить комментарию к сервису, это как раз то, что отвечает за сканирование при доступе (On-Access Scanner). Однако, возможность выключить через интерфейс недоступна и режим запуска тоже поменять не получается.
Что ж, ищем McShield.exe среди процессов в Таскменеджере - он там находится, убиваем - убивается. Радуемся, работаем, но в какой-то момент McShield.exe снова поднимается и все портит. Разбираться кто его поднимает - лень, но надо все-таки как-то сделать, чтобы не поднялся.
Решение до безобразия просто - переименовать файлик McShield.exe так, чтобы пытающийся поднять его не нашел. 
Итак, файлик "C:\Program Files (x86)\McAfee\VirusScan Enterprise\x64\McShield.exe" (путь можно посмотреть в свойствах сервиса "McAfee McShield") переименовываем в то, что нравится, - я добавил единичку в конце. Больше McAfee меня не беспокоил.

Важно: Когда закончили свои занимательные упражнения - обязательно переименуйте файлик обратно, - крайне не рекомендую отключать антивирус навсегда!

Wednesday, October 24, 2012

Свой собственный УЦ на OpenSSL

Снова пришлось упражняться с криптографией в исследовательских целях: надо было поднять свой (недоверенный в домене УЦ и проверить с ним некоторые штуки). Необходима была цепочка УЦ, т.е. что-то типа: Корневой УЦ --> Еще УЦ --> уже мой сертификат:


Инструмент - OpenSSL.
Пост пишу, главным образом для себя, чтобы в следующий раз не тратить время, а просто сделать по описанному порядку.

После того, как OpenSSL скачали и поставили.
1. Делаем корневой УЦ.
1.1. Делаем для него папку и подпапки:
Текстовый файл не содержит ничего (комментарий).
serial - содержит текущий сериальный номер сертификата.
serial.old - будет сделан после выпуска сертификата - там запишется предыдущий.
index.txt - надо сделать пустым. Все остальные index.txt.* сделаются после выпуска сертификата с этого УЦ.
openssl.cnf - копия дефолтного с незначительными изменениями, применительно к данному CA. Файл снабжен понятными комментариями.

1.2. Выпускаем корневой, самоподписанный сертификат:
openssl req -new -x509 -days 3650 -extensions v3_ca -keyout private/cakey.pem -out cacert.pem -config openssl.cnf

При этом секретный ключ будет положен  cakey.pem, сертификат - в cacert.pem.

2. Делаем выпускающий УЦ, подчиненный нашему корневому.
2.1. Такую же структуру папок:

В папку clients будем складывать сертификаты и pfx-ы клиентов (вручную, само туда класться не будет - чтобы корневая папку УЦ не засорялась).



2.2. Делаем запрос на сертификат выпускающего УЦ (почему-то я его назвал Subordinate): 
openssl req -new -days 3650 -keyout private/subcakey.pem -out subcareq.pem -config openssl.cnf


2.3. Идем на наш Корневой УЦ (== просто делаем туда CD) и выпускаем сертификат на только что сделанный запрос (подписываем запрос):
openssl ca -in ..\subca\subcareq.pem -extensions v3_ca -config openssl.cnf

3. Выпускаем сертификат для пользователя.
3.1. Идем на наш подчиненный УЦ (выпускающий УЦ) и делаем там запрос для пользовательского сертификата:
openssl req -new -days 365 -keyout key.pem -out req.pem

3.2. Подписываем запрос ключем УЦ:
openssl ca -in clients\req.pem -out clients\cer.cer -config openssl.cnf

3.3. Делаем из PKCS#12 (сшиваем ключ и сертификат в PFX):
openssl pkcs12 -export -out cer.pfx -inkey key.pem -in cer.cer

3.3* Иногда бывает нужно вытащить из PFX только секретный ключ, иногда хочется его вытащить и сохранить без шифрования, - команда ниже:
openssl pkcs12 -in ppp.pfx -out ppp.pem -nodes

Ключ будет сохранен в ppp.pem.

Ошибки.
1. Иногда, когда много раз упражняемся с выпуском сертификатов для одного пользователя, возможно возникновение ошибки при вызове команды п. 3.2
.....
Sign the certificate? [y/n]:y
failed to update database
TXT_DB error number 2

Здесь проблема связана с тем, что в одном CA OpenSSL не может быть более одного сертификата с одинаковыми параметрами. Для решения необходимо отозвать старый сертификат этого пользователя и повторить команду. Отозвать можно так:
openssl ca -revoke clients\certfilename.cer -config openssl.cnf

2. Для организации S/MIME в Outlook сертификат должен иметь определенные keyUsage и extendedKeyUsage:















Для указания этого OpenSSL проще отредактировать openssl.cnf:
[ usr_cert ]
....
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = critical, emailProtection

....