Могу ли я подписать файл.hlkx вручную с помощью сертификата EV для отправки на веб-сайт Microsoft
Я выполнил все тесты с моим USB-устройством в Hardware Lab Kit и теперь могу подготовить пакет драйвера.hlkx для отправки на веб-сайт Microsoft.
Проблема в том, что для драйвера Windows 10 требуется сертификат EV. EV-сертификат поставляется с USB-токеном Safenet, и этот USB-токен находится далеко от компьютера с установленным Hardware Lab Kit, поэтому я не могу автоматически подписать пакет.hlkx в Hardware Lab Kit.
Вопрос в том, как получить подписанные драйверы USB для Windows 10? У меня есть неподписанный драйвер (sys, cab, inf ... files), и у меня есть неподписанный пакет драйвера.hlkx из Hardware Lab Kit. Могу ли я подписать свой драйвер без отправки на веб-сайт Microsoft?
3 ответа
Вы можете
- Установите HLK Studio на компьютер, к которому подключен EV-токен;
- Скопируйте неподписанный файл.hlkx на компьютер с EV-токеном;
- Когда вы запустите HLK Studio из pt1, он предложит открыть файл.hlkx, укажите его;
- На вкладке "Пакет" HLK Studio создайте пакет как обычно.
Ответ от Алексея у меня не сработал, в итоге я использовал исходный код с этой страницы:
Я должен был сделать некоторые дополнительные настройки:
Перед использованием убедитесь, что сертификат EV находится в вашем личном хранилище сертификатов. В инструменте, который у вас есть для вашего USB-токена, вы сможете открыть сертификат и выбрать "Установить сертификат".
Создайте новое консольное приложение в Visual Studio и вставьте этот исходный код. Установите пакет слепков "WindowsBase", чтобы получить пространство имен System.IO.Packaging.
С некоторым дополнительным исходным кодом у нас может получиться так:
class Program
{
static void Main(string[] args)
{
X509Store store = new X509Store("My");
store.Open(OpenFlags.ReadOnly);
X509Certificate2 evCert = null;
foreach (X509Certificate2 mCert in store.Certificates)
{
if (mCert.Thumbprint == "3DF652D7EyourThumbprintF")
{
evCert = mCert;
}
}
Sign(@"C:\Path\To\Your\HLKXFile.hlkx", evCert);
}
public static void Sign(string package, X509Certificate2 certificate)
{
// Open the package to sign it
Package packageToSign = Package.Open(package);
// Specify that the digital signature should exist
// embedded in the signature part
PackageDigitalSignatureManager signatureManager = new PackageDigitalSignatureManager(packageToSign);
signatureManager.CertificateOption = CertificateEmbeddingOption.InCertificatePart;
// We want to sign every part in the package
List<Uri> partsToSign = new List<Uri>();
foreach (PackagePart part in packageToSign.GetParts())
{
partsToSign.Add(part.Uri);
}
// We will sign every relationship by type
// This will mean the signature is invalidated if *anything* is modified in //the package post-signing
List<PackageRelationshipSelector> relationshipSelectors = new List<PackageRelationshipSelector>();
foreach (PackageRelationship relationship in packageToSign.GetRelationships())
{
relationshipSelectors.Add(new PackageRelationshipSelector(relationship.SourceUri, PackageRelationshipSelectorType.Type, relationship.RelationshipType));
}
try
{
signatureManager.Sign(partsToSign, certificate, relationshipSelectors);
}
finally
{
packageToSign.Close();
}
}
}
Замените Thumbprint на ваш сертификат EV SHA1.
ИСПОЛЬЗУЙТЕ VSigntool(www.vsign.com), токен EV может быть общим, даже если он находится далеко от hlk