Andy Melnikov (nponeccop) wrote,
Andy Melnikov
nponeccop

Category:

PKI CA на смарт-карте на основе TPM

В продолжение темы о TPM: https://nponeccop.livejournal.com/669505.html

Решил я тут запилить WPA2-Enterprise, aka WPA2-EAP-TLS. А ему нужна PKI, PKI нужна CA, а CA нужно защищать свои ключи, в особенности корневой. Ну а чем его защищать, как не смарткартой?

Оказалось, что вообще нет способа сделать на винде CA, кроме стандартного решения на Windows Server. Ну а поскольку Windows Server у меня нету, и заводить его, чтобы было CA, как-то глупо, решил сделать решение на говне и палках. То есть на виндовом OpenSSL.

Но конечно "стандартным" путём мы не пойдём, а пойдём "правильным". То есть, опять ебаться!

В-общем в OpenSSL for Windows внезапно есть capi.dll. Качаем его, но они внезапно не умеют в подписанные инсталляторы, а GPG4Win то ещё говно и палки, так что вместо этого проверяем хеши.

На винде идущий из коробки certutil умеет считать sha256 файлов, а на сайте внезапно есть hashes.txt, и даже на HTTPS-сайте. В-общем проверил, что царь настоящий!

Дальше. У нас сходу 2 задачи:

1. Убедиться что capi есть в openssl engine -c
2. Убедиться что openssl engine -t -post list_certs рисует нужные сертификаты

Оба пункта не работают из коробки. И решение следующее:

- залепить openssl.cnf, чтобы capi грузился по дефолту
- запилить openssl.cmd, выставляющий переменные окружения

Батник сводится к:

set OPENSSL_CONF=%~dp0\openssl.cnf
set OPENSSL_ENGINES=%~dp0\engines-1_1

С openssl.cnf сложнее. Минимальный, решающий 2 задачи выше, выглядит так:
openssl_conf = conf_section

[conf_section]
engines = engine_section

[engine_section]
capi = capi_section

[capi_section]
init=1
Следующий этап - заставить работать openssl ca -engine capi -keyform engine

Там даже смешно, что все эти параметры недокументированные: -keyform engine это тайное знание, найденное методом тыка!

На самом деле даже то, что выше, собиралось по крупицам из постов вроде http://openssl.6102.n7.nabble.com/How-to-use-CAPI-engine-in-OpenSSL-1-0-0a-td11611.html

Upd: корневой серт тоже хез как генерить. Там внезапно не работает в новом павершелле но работает в старом

New-SelfSignedCertificate -CertStoreLocation "Cert:\CurrentUser\My" -FriendlyName "Bar" -Provider "Microsoft Base Smart Card Crypto Provider" -KeyProtection ProtectHigh -KeyUsageProperty All -Subject "CN=Foo CA" -KeyExportPolicy NonExportable -KeyLength 2048 -HashAlgorithm SHA256 -KeyUsage CertSign,CRLSign -TextExtension @('2.5.29.19={critical}{text}ca=1&pathlength=0','2.5.29.37={text}2.5.29.37.0') -KeySpec Signature
Tags: programming, все пидарасы а я, выебудни
Subscribe

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 16 comments