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:
| API | Platform | Dil/Framework | Kullanım |
|---|---|---|---|
| PKCS#11 | Cross-platform | C, C++, Python, Go | En yaygın HSM API'si |
| JCE | Java | Java, Kotlin, Scala | Java uygulamaları |
| CNG/CAPI | Windows | C#, C++, PowerShell | Windows 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 uygulama | PKCS#11 |
| Java uygulaması / JAR imzalama | JCE |
| Windows EXE/DLL imzalama | CNG + SignTool |
| Python skripting | PKCS#11 (python-pkcs11) |
| Go uygulaması | PKCS#11 (miekg/pkcs11) |
| CI/CD otomasyonu | CLI 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.
Yorumlar
Henüz yorum yapılmamış. İlk yorumu siz yapın!
Yorum Yaz