HSM Kullanarak C# ile PDF'leri Dijital Olarak İmzalama

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronPDF, HSM'ler (Donanım Güvenliği Modülleri) kullanarak PKCS#11 API üzerinden güvenli PDF imzalama sağlar, burada özel anahtarlar fiziksel cihazdan ayrılmaz, bankacılık seviyesinde güvenlik sunar ve görev açısından kritik uygulamalar için sahtekarlığa karşı dayanıklı dijital imza gerektirir.

Hızlı Başlangıç: HSM ile C#'ta PDF İmzalama

  1. NuGet aracılığıyla IronPDF'yi yükleyin: Install-Package IronPdf
  2. HSM cihazınızı yapılandırın (veya testiçin SoftHSM kullanın)
  3. HSM kimlik bilgilerinizi kullanarak bir UsbPkcs11HsmSigner oluşturun:
    1. IronPDF aşağıdaki NuGet Paket Yöneticisi ile yükleyin

      PM > Install-Package IronPdf
    2. Bu kod parçacığını kopyalayın ve çalıştırın.

      var hsmSigner = new UsbPkcs11HsmSigner(libraryPath, pin, tokenLabel, keyLabel);
    3. Canlı ortamınızda test için dağıtım yapın

      Ücretsiz deneme ile bugün projenizde IronPDF kullanmaya başlayın

      arrow pointer
  4. PDF'nizi oluşturun ve imzalayın:
    var pdf = renderer.RenderHtmlAsPdf("<h1>Document</h1>");
    pdf.SignAndSave("signed.pdf", hsmSigner);
    var pdf = renderer.RenderHtmlAsPdf("<h1>Document</h1>");
    pdf.SignAndSave("signed.pdf", hsmSigner);
    Dim pdf = renderer.RenderHtmlAsPdf("<h1>Document</h1>")
    pdf.SignAndSave("signed.pdf", hsmSigner)
    $vbLabelText   $csharpLabel
  5. PDF görüntüleyicinizde imzayı doğrulayın

Bir PDF belgesine imza eklemek birçok uygulamada yaygın bir gereksinimdir. Ancak görev açısından kritik uygulamalar daha yüksek güvenlik gerektirir, burada anahtar değiştirilemez. .pfx dosyasıyla yapılan normal bir imzalama işlemi, evinizde bir ana anahtar bulundurmak gibidir. Uygulama, belgeyi imzalamak için anahtarı belleğe yükler. Bilgisayar tehlikeye girerse, anahtar çalınabilir.

Daha güvenli bir alternatif Donanım Güvenliği Modülü (HSM) kullanmaktır. Bir HSM (USB anahtarı gibi) ile özel anahtar cihazın içinde oluşturulur ve dışarı çıkamaz.

Bu süreç, belgeyi bir bankaya götürmeye benzer. Uygulama bir PIN sağlar ve HSM belgeyi kasaya alır, anahtarla damgalar ve damgalı belgeyi geri döndürür. Anahtar asla kasadan çıkmaz. Bu, ilave güvenlik sağlar çünkü anahtar kopyalanamaz veya çalınamaz.

PDF Dosyalarını HSM ile Nasıl İmzalayabilirim?

Bir HSM ile imzalama genellikle uygulamanın etkileşimde bulunduğu bir fiziksel cihaz, örneğin bir USB anahtarı gerektirir. IronPDF, bu işlemlerle uyumludur çünkü hem kütüphane hem de standart HSM'ler ortak bir API olan PKCS#11'i kullanır. Bu kılavuz, fiziksel bir cihaz yerine simüle edilmiş bir HSM kullanmaktadır.

Üretim veya canlı test ortamlarında bu simülasyonu kullanmamalısınız. Bunun yerine, gerçek HSM'inizi kullanın. Üretim ortamlarında, HSM imzalamanın yanı sıra kapsamlı belge koruması için PDF güvenlik özelliklerini uygulamayı düşünün, örneğin şifre koruması ve izinler.

Bu simülasyonu çalıştırmak için önce gerekli anahtar ve token'ı oluşturmak için SoftHSM, OpenSSL ve OpenSC kurmalısınız. SoftHSM'i nasıl kullanacağınız hakkında daha fazla bilgi için, genel GitHub deposuna bakın.

HSM imzalama uygulamadan önce, IronPDF'yi doğru şekilde kurduğunuzdan ve üretim için lisans anahtarınızı yapılandırdığınızdan emin olun.

Bir HTML dizisinden başlayarak bir PDF oluşturun. Aşağıdaki örnek, simüle edilmiş SoftHSM için yolları ve kimlik bilgilerini tanımlar. Buna, SoftHSM .dll kütüphane dosyasının ve oluşturduğunuz .crt sertifika dosyasının mutlak yolunu sağlamak da dahildir.

Ardından, çıktı yolunu belirtin; bu örnekte output.pdf.

Üç dizeyi tanımlayın: hsmTokenLabel, hsmPin ve hsmKeyLabel. Bu dizgeler büyük/küçük harfe duyarlıdır ve tokcken ve sertifikayı SoftHSM ile oluştururken yarattığınız kimlik bilgileri ile tam olarak eşleşmelidir. Ardından, SoftHSM kütüphane yolunu, PIN'i, token etiketini ve anahtar etiketini parametre olarak geçirerek UsbPkcs11HsmSigner nesnesini başlatın.

Ayrıca, imzanın görsel bir temsilini belgeye eklemek için bir PdfSignatureImage oluşturun. Son olarak, SignAndSave'yi çağırın; bu, hsmSigner'yi kullanarak belgeyi imzalar ve belirtilen çıktı yoluna kaydeder.

HSM İmzalama Kodu Nasıl Görünür??

:path=/static-assets/pdf/content-code-examples/how-to/signing-with-hsm.cs
using IronPdf;
using IronPdf.Signing;
using IronSoftware.Pdfium.Signing;
using System.Drawing;

ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Testing</h1>");

// Define Paths and Credentials
string softhsmLibraryPath = @"D:\SoftHSM2\lib\softhsm2-x64.dll";
// These MUST match what you created
string hsmTokenLabel = "MyTestToken";
string hsmPin = "123456";
string hsmKeyLabel = "my-key"; // The label for the key *inside* the token

// Create the HsmSigner object.
UsbPkcs11HsmSigner hsmSigner = new UsbPkcs11HsmSigner(
    softhsmLibraryPath,
    hsmPin,
    hsmTokenLabel,
    hsmKeyLabel
);

// Create the Signature Image
string signatureImagePath = "IronSoftware.png";
PdfSignatureImage sigImage = new PdfSignatureImage(signatureImagePath, 0, new Rectangle(50, 50, 150, 150));

// Sign PDF with HSM
pdf.SignAndSave("signedWithHSM.pdf", hsmSigner);
Imports IronPdf
Imports IronPdf.Signing
Imports IronSoftware.Pdfium.Signing
Imports System.Drawing

Dim renderer As New ChromePdfRenderer()
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Testing</h1>")

' Define Paths and Credentials
Dim softhsmLibraryPath As String = "D:\SoftHSM2\lib\softhsm2-x64.dll"
' These MUST match what you created
Dim hsmTokenLabel As String = "MyTestToken"
Dim hsmPin As String = "123456"
Dim hsmKeyLabel As String = "my-key" ' The label for the key *inside* the token

' Create the HsmSigner object.
Dim hsmSigner As New UsbPkcs11HsmSigner(softhsmLibraryPath, hsmPin, hsmTokenLabel, hsmKeyLabel)

' Create the Signature Image
Dim signatureImagePath As String = "IronSoftware.png"
Dim sigImage As New PdfSignatureImage(signatureImagePath, 0, New Rectangle(50, 50, 150, 150))

' Sign PDF with HSM
pdf.SignAndSave("signedWithHSM.pdf", hsmSigner)
$vbLabelText   $csharpLabel

UsbPkcs11HsmSigner ayrıca iki isteğe bağlı parametre alır: digestAlgorithm ve signingAlgorithm. Varsayılan olarak, bunlar SHA256 ve RSA olarak ayarlanmıştır.

Farklı HSM Yapılandırmaları ile Çalışma

Farklı HSM cihazları belirli yapılandırmalar gerektirebilir. İmzalama işleyicisini müşteri algoritmalarıyla yapılandırmayı ve birden çok imzayı nasıl işeleyeceğinizi gösteren bir örnek:

// Configure with custom algorithms
var customHsmSigner = new UsbPkcs11HsmSigner(
    hsmLibraryPath,
    hsmPin,
    hsmTokenLabel,
    hsmKeyLabel,
    digestAlgorithm: IronPdf.Signing.DigestAlgorithm.SHA512,
    signingAlgorithm: IronPdf.Signing.SigningAlgorithm.RSA
);

// Apply signature with custom location and reason
var signatureOptions = new SignatureOptions
{
    SignerName = "Corporate Signing Authority",
    Location = "Company Headquarters",
    Reason = "Contract Approval"
};

// Load existing PDF for signing
var existingPdf = PdfDocument.FromFile("contract.pdf");
existingPdf.SignAndSave("contract-signed.pdf", customHsmSigner, signatureOptions);
// Configure with custom algorithms
var customHsmSigner = new UsbPkcs11HsmSigner(
    hsmLibraryPath,
    hsmPin,
    hsmTokenLabel,
    hsmKeyLabel,
    digestAlgorithm: IronPdf.Signing.DigestAlgorithm.SHA512,
    signingAlgorithm: IronPdf.Signing.SigningAlgorithm.RSA
);

// Apply signature with custom location and reason
var signatureOptions = new SignatureOptions
{
    SignerName = "Corporate Signing Authority",
    Location = "Company Headquarters",
    Reason = "Contract Approval"
};

// Load existing PDF for signing
var existingPdf = PdfDocument.FromFile("contract.pdf");
existingPdf.SignAndSave("contract-signed.pdf", customHsmSigner, signatureOptions);
Imports IronPdf

' Configure with custom algorithms
Dim customHsmSigner As New UsbPkcs11HsmSigner(
    hsmLibraryPath,
    hsmPin,
    hsmTokenLabel,
    hsmKeyLabel,
    digestAlgorithm:=IronPdf.Signing.DigestAlgorithm.SHA512,
    signingAlgorithm:=IronPdf.Signing.SigningAlgorithm.RSA
)

' Apply signature with custom location and reason
Dim signatureOptions As New SignatureOptions With {
    .SignerName = "Corporate Signing Authority",
    .Location = "Company Headquarters",
    .Reason = "Contract Approval"
}

' Load existing PDF for signing
Dim existingPdf As PdfDocument = PdfDocument.FromFile("contract.pdf")
existingPdf.SignAndSave("contract-signed.pdf", customHsmSigner, signatureOptions)
$vbLabelText   $csharpLabel

Bu yaklaşım, belirli uyumluluk standartları gerektiren dijital imza örnekleriyle veya imza ayrıntılarını izlemek için meta veri eklemeniz gerektiğinde özellikle yararlıdır.

Yaygın HSM Yapılandırma Sorunları Neler

Kod örneğini çalıştırırken aşağıdaki hatayla karşılaşırsanız, yapılandırmanızı hata ayıklamak ve doğrulamak için bu teşhis adımlarını izleyin. Dijital imza sorunları hakkında ek yardım için dijital imza sorun giderme kılavuzumuza bakın.

Bu CKR_GENERAL_ERROR hatası genellikle program SoftHSM yapılandırma dosyasını bulamadığında veya .NET uygulaması 32 bit işlemci olarak çalışırken SoftHSM kütüphanesi 64 bit olduğunda ortaya çıkar.

Konsol çıktısında tam yığın izleme ile CHR_GENERAL_ERROR gösteren PKCS#11 HSM başlatma hatası

Platform Hedefini Değiştirme

Bu hatanın yaygın bir nedeni mimari uyumsuzluktur. C# uygulamanız, 64 bit SoftHSM kütüphanesiyle uyumlu olması için 64 bit işlem olarak çalışmalıdır (CHOOSE_x64). Uyumluluğu sağlamak için Visual Studio proje özelliklerinizde Platform hedefini 'Any CPU' veya 'x86'dan x64 olarak değiştirin.

Koşullu derleme sembolleriyle x64 mimarisine ayarlanmış Platform hedefi ile Visual Studio derleme yapılandırması gösteriliyor

Ortam Değişkeni Ayarlama

Diğer bir yaygın neden ise, programın SoftHSM'de .conf dosyasını bulamamasıdır. Sistemdeki ortam değişkenini ayarlayarak kütüphaneye nerede arayacağını söylemeniz gerekir. SOFTHSM2_CONF adlı yeni bir değişken oluşturun ve değerini yapılandırma dosyanızın tam yoluna ayarlayın (ör. D:\SoftHSM2\etc\softhsm2.conf). Değişiklikleri yaptıktan sonra Visual Studio'yu yeniden başlatmayı unutmayın. softhsm2-x64.dll x64 SOFTHSM2_CONF

Windows Sistem Değişkenleri iletişim kutusu ile HSM yapılandırma yolunu gösteren SOFTISM2_CONF ortam değişkeni vurgulanmış olarak gösteriliyor

Ek olarak, bu satırı ekleyerek değişkenin bulunup bulunmadığını doğrulayabilirsiniz:

Console.WriteLine($"Verifying variable: {Environment.GetEnvironmentVariable("SOFTHSM2_CONF")}");
Console.WriteLine($"Verifying variable: {Environment.GetEnvironmentVariable("SOFTHSM2_CONF")}");
Console.WriteLine($"Verifying variable: {Environment.GetEnvironmentVariable(""SOFTHSM2_CONF"")}")
$vbLabelText   $csharpLabel

Konsol çıktısı boş dönerse, program ortam değişkenini bulamaz. Ayarlayın, Visual Studio veya bilgisayarınızı yeniden başlatın ve tekrar deneyin.

Üretim HSM Dağıtımı için En İyi Uygulamalar

Üretim ortamlarında HSM imzalı PDF'leri dağıtırken bu ek güvenlik önlemlerini dikkate alın:

  1. Denetim Kaydı: Erişimi izlemek ve uyumluluğu sürdürmek için tüm HSM işlemlerinin kapsamlı kaydını uygulayın
  2. Sertifika Yönetimi: Organizasyonunuzun güvenlik politikalarına göre sertifikaları düzenli olarak güncelleyin ve değiştirin
  3. Yedekleme Prosedürleri: HSM yapılandırması için doğru yedekleme ve kurtarma prosedürleri oluşturun
  4. Performans Optimizasyonu: İmza performansını izleyin ve sık erişilen sertifikalar için önbellek stratejileri uygulayın

Bu uygulamalar, standart PDF imzalama iş akışını tamamlar ve belge güvenlik altyapınızın güçlü kalmasını sağlar ve endüstri standartlarına uyumlu hale getirir.

Sıkça Sorulan Sorular

HSM imzalama nedir ve normal PDF imzalamadan nasıl farklıdır?

IronPDF ile yapılan HSM (Donanım Güvenlik Modülü) imzalama, özel anahtarların fiziksel cihazdan hiç çıkmadığı banka düzeyinde güvenlik sağlar. Anahtarların bellekte yüklendiği ve bilgisayara saldırılması durumunda ele geçirilebileceği normal .pfx dosyası imzalamadan farklı olarak, HSM imzalama özel anahtarı donanım cihazı içinde kilitli tutar, kopyalanmasını veya çalınmasını imkansız hale getirir.

PDF'ler için C# dilinde HSM imzalamayı nasıl yapılandırırım?

IronPDF ile HSM imzalamayı yapılandırmak için, önce 'Install-Package IronPdf' ile kütüphaneyi NuGet üzerinden yükleyin, ardından kitaplık yolu, PIN, token etiketi ve anahtar etiketi dahil HSM kimlik bilgilerinizle bir UsbPkcs11HsmSigner nesnesi oluşturun. Son olarak, PDF belgenizi imzalamak için SignAndSave yöntemini kullanın.

PDF imzaları için HSM kullanmanın güvenlik avantajları nelerdir?

IronPDF ile HSM kullanmak, görev kritik uygulamalar için tahrifata karşı korumalı dijital imzalar sağlar. Süreç, belgeleri bir banka kasasına götürmek gibidir - uygulama bir PIN sağlar, HSM belgeyi dahili olarak imzalar ve özel anahtarı hiç açığa çıkarmadan imzalanmış belgeyi geri verir, kopyalanamaması ve çalınamaması garantilenir.

Fiziksel bir cihaz olmadan HSM imzalamayı test edebilir miyim?

Evet, IronPDF, geliştirme ve test amaçlı SoftHSM gibi kütüphaneler kullanarak HSM imzalamayı simüle etmenize izin verir. Ancak, üretim ortamlarında uygun güvenliği sağlamak için gerçek fiziksel HSM cihazları kullanmanız gerekir.

IronPDF, HSM iletişimi için hangi API standardını kullanır?

IronPDF, standart HSM cihazları ile uyumluluğu sağlamak amacıyla HSM iletişimi için PKCS#11 API standardını kullanır. Bu ortak API, IronPDF'nin çeşitli HSM donanım tokenları ve güvenlik modülleriyle sorunsuz bir şekilde etkileşime girmesini sağlar.

PDF'imin HSM ile başarıyla imzalandığını nasıl doğrularım?

IronPDF'nin HSM özelliği ile bir PDF imzaladıktan sonra, imzayı herhangi bir standart PDF görüntüleyicisinde açarak doğrulayabilirsiniz. Görüntüleyici, dijital imza bilgilerini gösterecek ve belgenin özgünlüğünü ve bütünlüğünü doğrulayacaktır.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku
Başlamaya Hazır mısınız?
Nuget İndirmeler 19,014,616 | Sürüm: 2026.5 just released
Still Scrolling Icon

Hâlâ Kaydırıyor Musunuz?

Hızlıca kanıt ister misiniz? PM > Install-Package IronPdf
bir örnek çalıştır HTML'nizi bir PDF'ye dönüştüğünü izleyin.