Türkiye'de İlk! — Cloud OV/EV Kod İmzamala Sertifikaları !
Anasayfa Cloud Kod İmzalama Yeni İmzalama Araçları Yeni İletişim
Cloud İmzalama

HSM API Entegrasyonu: PKCS#11, JCE ve CNG ile Kod İmzalama

HSM API entegrasyonu nasıl yapılır? PKCS#11, Java JCE ve Microsoft CNG arayüzleri ile kod imzalama uygulamaları geliştirme rehberi.

4 dk okuma

HSM cihazlarıyla programatik olarak iletişim kurmak için standart kriptografik API'ler kullanılır. Bu API'ler sayesinde uygulamalarınız, HSM'deki anahtarları güvenli şekilde kullanarak kod imzalama, şifreleme ve kimlik doğrulama işlemlerini gerçekleştirebilir.

HSM API Standartları

HSM cihazlarıyla iletişim kurmak için 3 temel API standardı kullanılır:

APIPlatformDil/FrameworkKullanım
PKCS#11Cross-platformC, C++, Python, GoEn yaygın HSM API'si
JCEJavaJava, Kotlin, ScalaJava uygulamaları
CNG/CAPIWindowsC#, C++, PowerShellWindows kod imzalama

1. PKCS#11 Entegrasyonu

PKCS#11 (Cryptoki), RSA Laboratories tarafından tanımlanan platformdan bağımsız kriptografik token arayüzüdür. Hemen her HSM sağlayıcı PKCS#11 driver sağlar.

PKCS#11 ile İmzalama (Python)

import pkcs11
from pkcs11 import Mechanism

# HSM kütüphanesini yükle
lib = pkcs11.lib('/opt/cloudhsm/lib/libcloudhsm_pkcs11.so')

# Token üzerinde oturum aç
token = lib.get_token(token_label='hsm0')
session = token.open(user_pin='codesign_user:MyPassword')

# İmzalama anahtarını bul
private_key = session.get_key(
    object_class=pkcs11.ObjectClass.PRIVATE_KEY,
    label='codesigning_key'
)

# Hash'i imzala
signature = private_key.sign(
    data=file_hash,
    mechanism=Mechanism.SHA256_RSA_PKCS
)

print(f"İmza oluşturuldu: {len(signature)} bytes")

PKCS#11 ile OpenSSL Entegrasyonu

# OpenSSL PKCS#11 engine ile CSR oluşturma
openssl req -new -engine pkcs11 \
  -keyform engine \
  -key "pkcs11:token=hsm0;object=codesigning_key" \
  -out codesign.csr \
  -subj "/CN=My Application/O=My Company"

# İmzalama
openssl dgst -sha256 -engine pkcs11 \
  -keyform engine \
  -sign "pkcs11:token=hsm0;object=codesigning_key" \
  -out signature.bin myapp.exe

2. Java JCE Entegrasyonu

JCE (Java Cryptography Extension), Java'nın standart kriptografi framework'üdür. HSM sağlayıcılar JCE Provider sunar.

JCE ile İmzalama (Java)

import java.security.*;

// HSM Provider'ı yükle
Provider hsmProvider = new com.cavium.provider.CaviumProvider();
Security.addProvider(hsmProvider);

// KeyStore üzerinden anahtara erişim
KeyStore ks = KeyStore.getInstance("Cavium");
ks.load(null, null);
PrivateKey privateKey = (PrivateKey) ks.getKey("codesigning_key", null);

// İmzalama
Signature signature = Signature.getInstance("SHA256withRSA", "Cavium");
signature.initSign(privateKey);
signature.update(fileBytes);
byte[] signedData = signature.sign();

System.out.println("İmza başarılı: " + signedData.length + " bytes");

Java JAR İmzalama

# jarsigner ile HSM üzerinden imzalama
jarsigner -keystore NONE -storetype PKCS11 \
  -providerClass sun.security.pkcs11.SunPKCS11 \
  -providerArg pkcs11.cfg \
  -tsa http://timestamp.digicert.com \
  myapp.jar "codesigning_key"

3. Microsoft CNG Entegrasyonu

CNG (Cryptography API: Next Generation), Windows platformundaki modern kriptografik API'dir. SignTool ile doğrudan kullanılır.

CNG ile İmzalama (C#)

using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;

// Sertifika deposundan HSM-backed sertifikayı al
var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
var cert = store.Certificates.Find(
    X509FindType.FindByThumbprint, 
    "THUMBPRINT_HERE", false)[0];

// CNG ile imzalama
using var rsa = cert.GetRSAPrivateKey() as RSACng;
byte[] signature = rsa.SignData(
    fileBytes, 
    HashAlgorithmName.SHA256, 
    RSASignaturePadding.Pkcs1
);

Console.WriteLine($"İmza başarılı: {signature.Length} bytes");

SignTool ile Windows İmzalama

# HSM provider üzerinden signtool ile imzalama
signtool sign /sha1 <THUMBPRINT> ^
  /tr http://timestamp.digicert.com ^
  /td sha256 /fd sha256 ^
  /csp "HSM_Provider_Name" ^
  MyApp.exe

# İmza doğrulama
signtool verify /pa /v MyApp.exe

API Seçim Rehberi

SenaryoÖnerilen API
Cross-platform uygulamaPKCS#11
Java uygulaması / JAR imzalamaJCE
Windows EXE/DLL imzalamaCNG + SignTool
Python skriptingPKCS#11 (python-pkcs11)
Go uygulamasıPKCS#11 (miekg/pkcs11)
CI/CD otomasyonuCLI araçları (signtool, jarsigner)

Hata Yönetimi ve En İyi Uygulamalar

  • Bağlantı havuzu: HSM oturumlarını yeniden kullanarak performansı artırın
  • Retry mekanizması: Geçici hatalar için exponential backoff uygulayın
  • Timeout: Her HSM çağrısına makul timeout belirleyin
  • Loglama: Her imzalama işlemini loglayın ama kimlik bilgilerini asla loglamayın
  • Hata izolasyonu: HSM hataları uygulama çökmesine yol açmamalı

Sonuç

HSM API entegrasyonu, kod imzalama sürecinizi otomatikleştirmenin ve güvenliğini artırmanın anahtarıdır. İhtiyacınıza uygun API'yi seçerek (PKCS#11, JCE veya CNG), HSM'deki anahtarlarınızla programatik olarak imzalama yapabilirsiniz.

Bu yazıyı paylaş
Yazar

Ali Yiğit

Önerilen Kod İmzalama Sertifikaları

Tüm Ürünler
CLOUDCODESIGNING DigiCert

DigiCert Cloud EV Kod İmzalama

DigiCert EV Cloud Kod İmzalama. SmartScreen anında itibar, WHQL portal erişimi, kernel-mode driver i

$850,00 /yıl
Detaylar
CLOUDCODESIGNING DigiCert

DigiCert Cloud OV Kod İmzalama

DigiCert OV Cloud Kod İmzalama. Dünyanın en güvenilir CA'sından Authenticode, Java JAR, Office VBA d

$534,00 /yıl
Detaylar

Yorumlar

Henüz yorum yapılmamış. İlk yorumu siz yapın!

Yorum Yaz