Altbilgi içeriğine atla
IRONPDF KULLANARAK

.NET Çözümlerde IronPDF Ile PDF API Nasıl Kullanilir

ASP.NET Core'da bir PDF'ye dijital imza eklemek, belge bütünlüğünü korur, imzalayanın kimliğini doğrular ve dosyayı çoğu yargı yetkisinde hukuki olarak savunulabilir hale getirir. IronPDF ile, birkaç satır C# kod içinde sertifika dosyalarını kullanarak sunucu tarafında PDF'leri imzalayabilir, görünür imza görselleri ekleyebilir ve etkileşimli imza formu alanlarını gömebilirsiniz.

Kütüphaneyi NuGet'ten yükleyin, .pfx sertifikanızı alın ve aşağıdaki örnekleri izleyerek üretim için hazır bir belge imzalama iş akışı oluşturun.

Install-Package IronPdf

Ayrıca Visual Studio içinde NuGet Paket Yöneticisi aracılığıyla da yükleyebilir veya doğrudan IronPDF ürün sayfasından indirebilirsiniz. Ücretsiz deneme başlatın ve bağlı kalmadan tüm imzalama özelliklerini test edin.

Dijital PDF İmzası Nedir ve Neden Önemlidir?

Dijital imza, imzalayan kişinin kimliğini bir belgenin belirli bir sürümüyle bağlayan kriptografik bir mekanizmadır. Basit bir elektronik imzadan -- örneğin yazılmış bir isim veya taranmış bir görüntü -- farklıdır çünkü doğrulanabilir, değiştirilmediği belli bir mühür oluşturmak için açık anahtar kriptografisini kullanır.

Birisi bir PDF'yi dijital olarak imzaladığında, imzalama yazılımı belge içeriğinin bir özetini oluşturur ve bu özeti imzalayanın özel anahtarıyla şifreler. Ortaya çıkan imza, PDF'ye imzalayanın kamu sertifikası ile birlikte gömülür. Dijital imzaları destekleyen herhangi bir PDF okuyucu -- Adobe Acrobat Reader ve modern tarayıcılara yerleşik PDF görüntüleyiciler dahil -- özetin şifresini açık anahtar ile açabilir ve belgeyi yeni hesaplanmış bir özetle karşılaştırabilir. Eğer özetler eşleşirse, belge gerçek ve değişmemiştir.

Dijital İmzaların Hukuki Önemi Neden Var?

Çoğu ülkede, dijital olarak imzalanmış belgeler el ile imzalanmış kağıt sözleşmeleri ile aynı yasal ağırlığa sahiptir. Avrupa Birliği'ndeki eIDAS düzenlemesi ve Amerika Birleşik Devletleri'ndeki ESIGN Yasası belirli koşullar altında elektronik imzaları yasal olarak bağlayıcı tanır. Sertifika tabanlı dijital imzalar bu gereksinimlerin en güçlü düzeyini karşılar.

ASP.NET Core'da Dijital İmzalar Nerede Kullanılır?

ASP.NET Core uygulaması içerisinde sunucu tarafında imzalama, işlemler sırasında belgeleri otomatik olarak imzalamanıza olanak tanır -- istemci yazılımı gerektirmez. Sözleşmeler, faturalar, uyumluluk raporları ve gizlilik anlaşmaları tümü oluşturuldukları anda imzalanabilir ve imzalı dosya kullanıcıya doğrudan geri döndürülebilir veya bir belge yönetim sisteminde saklanabilir. IronPDF, HTML'den PDF'ye işlem hattını kriptografik imzalamaya kadar tümünü ele alır, bu yüzden iş akışını uygularken düşük seviyeli PDF spesifikasyon detaylarına dokunmanıza gerek kalmaz.

[30] ## IronPDF'i bir ASP.NET Core Projesinde Nasıl Kurarsınız?

Çalışan bir imzalama ortamına ulaşmanın en hızlı yolu NuGet paketidir. Visual Studio'da Paket Yöneticisi Konsolunu açın ve şu komutu çalıştırın:

Install-Package IronPdf

Alternatif olarak, Çözüm Gezgini'nde projeye sağ tıklayın, "NuGet Paketlerini Yönet"i seçin, IronPdf arayın ve Yükle'ye tıklayın. Kurulum sonrası, denetleyici veya servis sınıfınızın en üstüne şu using yönergelerini ekleyin:

using IronPdf;
using IronPdf.Signing;
using IronPdf;
using IronPdf.Signing;
Imports IronPdf
Imports IronPdf.Signing
$vbLabelText   $csharpLabel

IronPDF, .NET 8 ve .NET 9/10 hedefler, bu yüzden modern ASP.NET Core projelerine doğal olarak uyar. İlk kurulumun ayrıntılı bir incelemesi için, IronPDF hızlı başlangıç kılavuzuna bakın.

ASP.NET Core'da Bir Sertifika Dosyası ile PDF Nasıl İmzalanır?

En yaygın imzalama yöntemi bir .pfx veya .p12 sertifika dosyasını kullanır. Bu dosyalar özel anahtar ve genel sertifika zincirini tek bir şifre korumalı arşivde birleştirir. Bir DigiCert veya GlobalSign gibi güvenilir bir sertifika otoritesinden (CA) temin edebilir veya geliştirme ve test için kendi kendine imzalanmış bir sertifika oluşturabilirsiniz.

Aşağıdaki örnek, HTML'den bir PDF oluşturur ve sertifika tabanlı bir dijital imza uygular:

using IronPdf;
using IronPdf.Signing;
using Microsoft.AspNetCore.Mvc;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapPost("/sign-with-certificate", (IWebHostEnvironment env) =>
{
    // Generate a PDF from HTML content
    var renderer = new ChromePdfRenderer();
    var document = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1><p>Terms and conditions...</p>");

    // Locate the PFX certificate on the server
    string certPath = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx");

    // Build the signature object
    var signature = new PdfSignature(certPath, "yourPassword")
    {
        SigningContact = "legal@yourcompany.com",
        SigningLocation = "Chicago, IL, USA",
        SigningReason = "Document Approval"
    };

    // Apply the signature and save
    document.Sign(signature);
    string outputPath = Path.Combine(Path.GetTempPath(), "signed-contract.pdf");
    document.SaveAs(outputPath);

    return Results.File(outputPath, "application/pdf", "signed-contract.pdf");
});

app.Run();
using IronPdf;
using IronPdf.Signing;
using Microsoft.AspNetCore.Mvc;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapPost("/sign-with-certificate", (IWebHostEnvironment env) =>
{
    // Generate a PDF from HTML content
    var renderer = new ChromePdfRenderer();
    var document = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1><p>Terms and conditions...</p>");

    // Locate the PFX certificate on the server
    string certPath = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx");

    // Build the signature object
    var signature = new PdfSignature(certPath, "yourPassword")
    {
        SigningContact = "legal@yourcompany.com",
        SigningLocation = "Chicago, IL, USA",
        SigningReason = "Document Approval"
    };

    // Apply the signature and save
    document.Sign(signature);
    string outputPath = Path.Combine(Path.GetTempPath(), "signed-contract.pdf");
    document.SaveAs(outputPath);

    return Results.File(outputPath, "application/pdf", "signed-contract.pdf");
});

app.Run();
Imports IronPdf
Imports IronPdf.Signing
Imports Microsoft.AspNetCore.Mvc

Dim builder = WebApplication.CreateBuilder(args)
Dim app = builder.Build()

app.MapPost("/sign-with-certificate", Function(env As IWebHostEnvironment)
    ' Generate a PDF from HTML content
    Dim renderer = New ChromePdfRenderer()
    Dim document = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1><p>Terms and conditions...</p>")

    ' Locate the PFX certificate on the server
    Dim certPath As String = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx")

    ' Build the signature object
    Dim signature = New PdfSignature(certPath, "yourPassword") With {
        .SigningContact = "legal@yourcompany.com",
        .SigningLocation = "Chicago, IL, USA",
        .SigningReason = "Document Approval"
    }

    ' Apply the signature and save
    document.Sign(signature)
    Dim outputPath As String = Path.Combine(Path.GetTempPath(), "signed-contract.pdf")
    document.SaveAs(outputPath)

    Return Results.File(outputPath, "application/pdf", "signed-contract.pdf")
End Function)

app.Run()
$vbLabelText   $csharpLabel

ChromePdfRenderer geçerli herhangi bir HTML dizesini veya URL'yi PDF'e dönüştürür. PdfSignature yapıcı, sertifika yolunu ve şifresini kabul eder ve isteğe bağlı özellikler (SigningContact, SigningLocation, SigningReason) PDF görüntüleyicilerinin imza panelinde göstereceği metadatalar ekler. Sign metodu kriptografik imzayı gömer ve SaveAs imzalanmış dosyayı diske yazar.

İmzalı Dosyayı Hafızadan Döndürme

Geçici bir dosyayı diske yazmak istemediğinizde, PDF'i bir MemoryStream olarak kaydedin ve doğrudan denetleyici eyleminden geri döndürün:

var stream = new MemoryStream();
document.SaveAs(stream);
stream.Position = 0;
return Results.File(stream, "application/pdf", "signed-contract.pdf");
var stream = new MemoryStream();
document.SaveAs(stream);
stream.Position = 0;
return Results.File(stream, "application/pdf", "signed-contract.pdf");
Dim stream As New MemoryStream()
document.SaveAs(stream)
stream.Position = 0
Return Results.File(stream, "application/pdf", "signed-contract.pdf")
$vbLabelText   $csharpLabel

Bu yaklaşım, geçici dosya yönetiminin gereksiz yere yavaşlatma etkisi yaratacağı yüksek verimli API'lere uygundur.

Tam bir özellik referansı için PdfSignature API dokümantasyonuna bakın.

Bir PDF'ye Görünür İmza Görüntüsü Nasıl Eklenir?

Kriptografik imzalar belge bütünlüğünü korur, ancak görüntülenen PDF'de görünmezdir. Birçok iş akışı -- özellikle sözleşmeler veya mektuplar gibi -- ayrıca sayfaya basılan, taranmış el yazısı imza veya şirket mührü gibi görünür bir temsil gerektirir.

IronPDF, bunu LoadSignatureImageFromFile yöntemi aracılığıyla destekler. Yöntem, bir resim yolu, bir sayfa indeksi ve görünür imzanın konum ve boyutlarını tanımlayan bir IronSoftware.Drawing.Rectangle kabul eder:

using IronPdf;
using IronPdf.Signing;
using IronSoftware.Drawing;
using Microsoft.AspNetCore.Mvc;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapPost("/sign-with-visible-image", (IWebHostEnvironment env) =>
{
    // Load an existing PDF (for example, an invoice template)
    string pdfPath = Path.Combine(env.ContentRootPath, "Documents", "invoice.pdf");
    var document = PdfDocument.FromFile(pdfPath);

    // Paths to the certificate and the signature image
    string certPath = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx");
    string imagePath = Path.Combine(env.ContentRootPath, "Images", "signature.png");

    // Define where the visible signature appears (x, y, width, height in points)
    var signatureArea = new Rectangle(50, 680, 200, 80);

    var signature = new PdfSignature(certPath, "yourPassword");
    signature.LoadSignatureImageFromFile(imagePath, pageIndex: 0, signatureArea);

    document.Sign(signature);
    string outputPath = Path.Combine(Path.GetTempPath(), "signed-invoice.pdf");
    document.SaveAs(outputPath);

    return Results.File(outputPath, "application/pdf", "signed-invoice.pdf");
});

app.Run();
using IronPdf;
using IronPdf.Signing;
using IronSoftware.Drawing;
using Microsoft.AspNetCore.Mvc;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapPost("/sign-with-visible-image", (IWebHostEnvironment env) =>
{
    // Load an existing PDF (for example, an invoice template)
    string pdfPath = Path.Combine(env.ContentRootPath, "Documents", "invoice.pdf");
    var document = PdfDocument.FromFile(pdfPath);

    // Paths to the certificate and the signature image
    string certPath = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx");
    string imagePath = Path.Combine(env.ContentRootPath, "Images", "signature.png");

    // Define where the visible signature appears (x, y, width, height in points)
    var signatureArea = new Rectangle(50, 680, 200, 80);

    var signature = new PdfSignature(certPath, "yourPassword");
    signature.LoadSignatureImageFromFile(imagePath, pageIndex: 0, signatureArea);

    document.Sign(signature);
    string outputPath = Path.Combine(Path.GetTempPath(), "signed-invoice.pdf");
    document.SaveAs(outputPath);

    return Results.File(outputPath, "application/pdf", "signed-invoice.pdf");
});

app.Run();
Imports IronPdf
Imports IronPdf.Signing
Imports IronSoftware.Drawing
Imports Microsoft.AspNetCore.Mvc

Dim builder = WebApplication.CreateBuilder(args)
Dim app = builder.Build()

app.MapPost("/sign-with-visible-image", Function(env As IWebHostEnvironment)
    ' Load an existing PDF (for example, an invoice template)
    Dim pdfPath As String = Path.Combine(env.ContentRootPath, "Documents", "invoice.pdf")
    Dim document = PdfDocument.FromFile(pdfPath)

    ' Paths to the certificate and the signature image
    Dim certPath As String = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx")
    Dim imagePath As String = Path.Combine(env.ContentRootPath, "Images", "signature.png")

    ' Define where the visible signature appears (x, y, width, height in points)
    Dim signatureArea As New Rectangle(50, 680, 200, 80)

    Dim signature As New PdfSignature(certPath, "yourPassword")
    signature.LoadSignatureImageFromFile(imagePath, pageIndex:=0, signatureArea)

    document.Sign(signature)
    Dim outputPath As String = Path.Combine(Path.GetTempPath(), "signed-invoice.pdf")
    document.SaveAs(outputPath)

    Return Results.File(outputPath, "application/pdf", "signed-invoice.pdf")
End Function)

app.Run()
$vbLabelText   $csharpLabel

Görünür imaj, sağladığınız koordinatlarda belirtilen sayfaya birleştirilir. Kriptografik imza aynı anda tüm belgeye uygulanır, böylece tek bir işlemde hem güvenlik hem de görsel onay alırsınız.

Resim bellekte yaşıyorsa (örneğin bir veritabanından veya bulut deposundan alınmışsa), bunun yerine LoadSignatureImageFromStream kullanın. Görsel imzalama seçeneklerine daha derin bir bakış için, PDF imzalama kılavuzuna bakın.

Dış İmzalayanlar İçin İmza Formu Alanları Nasıl Oluşturulur?

Bazı iş akışlarında, belge sisteminiz tarafından oluşturulur ancak bir müşteri, bir ortak veya bir düzenleyici kuruluş gibi dış bir taraf tarafından imzalanması gerekir. Bu tarafdan önceden bir sertifika toplamak yerine, PDF'ye özel bir imza form alanı ekleyip belgeyi onlara gönderirsiniz. Alıcılar, PDF'yi Adobe Acrobat Reader veya başka bir uyumlu görüntüleyicide açarlar, imza alanına tıklarlar ve kendi sertifikalarını veya elektronik imzalarını uygularlar.

using IronPdf;
using IronPdf.Forms;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/generate-signable-form", (IWebHostEnvironment env) =>
{
    // Render the document that requires a client signature
    var renderer = new ChromePdfRenderer();
    var pdf = renderer.RenderHtmlAsPdf(@"
        <h1>Client Service Agreement</h1>
        <p>Please review the terms below and sign in the field provided.</p>
        <p>By signing, you confirm acceptance of all listed terms and conditions.</p>
    ");

    // Define the signature field: name, page, x, y, width, height (in points)
    var signatureField = new SignatureFormField(
        "ClientSignature",
        pageIndex: 0,
        x: 50,
        y: 600,
        width: 300,
        height: 100
    );

    pdf.Form.Add(signatureField);

    string outputPath = Path.Combine(Path.GetTempPath(), "client-agreement.pdf");
    pdf.SaveAs(outputPath);

    return Results.File(outputPath, "application/pdf", "client-agreement.pdf");
});

app.Run();
using IronPdf;
using IronPdf.Forms;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/generate-signable-form", (IWebHostEnvironment env) =>
{
    // Render the document that requires a client signature
    var renderer = new ChromePdfRenderer();
    var pdf = renderer.RenderHtmlAsPdf(@"
        <h1>Client Service Agreement</h1>
        <p>Please review the terms below and sign in the field provided.</p>
        <p>By signing, you confirm acceptance of all listed terms and conditions.</p>
    ");

    // Define the signature field: name, page, x, y, width, height (in points)
    var signatureField = new SignatureFormField(
        "ClientSignature",
        pageIndex: 0,
        x: 50,
        y: 600,
        width: 300,
        height: 100
    );

    pdf.Form.Add(signatureField);

    string outputPath = Path.Combine(Path.GetTempPath(), "client-agreement.pdf");
    pdf.SaveAs(outputPath);

    return Results.File(outputPath, "application/pdf", "client-agreement.pdf");
});

app.Run();
Imports IronPdf
Imports IronPdf.Forms
Imports Microsoft.AspNetCore.Builder
Imports Microsoft.AspNetCore.Hosting
Imports Microsoft.Extensions.Hosting

Dim builder = WebApplication.CreateBuilder(args)
Dim app = builder.Build()

app.MapGet("/generate-signable-form", Function(env As IWebHostEnvironment)
    ' Render the document that requires a client signature
    Dim renderer = New ChromePdfRenderer()
    Dim pdf = renderer.RenderHtmlAsPdf("
        <h1>Client Service Agreement</h1>
        <p>Please review the terms below and sign in the field provided.</p>
        <p>By signing, you confirm acceptance of all listed terms and conditions.</p>
    ")

    ' Define the signature field: name, page, x, y, width, height (in points)
    Dim signatureField = New SignatureFormField(
        "ClientSignature",
        pageIndex:=0,
        x:=50,
        y:=600,
        width:=300,
        height:=100
    )

    pdf.Form.Add(signatureField)

    Dim outputPath As String = Path.Combine(Path.GetTempPath(), "client-agreement.pdf")
    pdf.SaveAs(outputPath)

    Return Results.File(outputPath, "application/pdf", "client-agreement.pdf")
End Function)

app.Run()
$vbLabelText   $csharpLabel

SignatureFormField yapıcı parametreleri alanın sayfa üzerindeki konumuna doğrudan eşlenir. Alıcı PDF'yi açtığında, imzalarının gideceği yeri açıkça belirlenmiş bir kutu görürler. Tamamlanmış form daha sonra sisteminize geri dönebilir, içinde gömülü imzayı yükler, doğrulayabilir ve arşivleyebilirsiniz.

PDF formu işlemeleri hakkında daha fazla bilgi için -- gönderilen form verilerinin geri okunması da dahil -- PDF formu düzenleme kılavuzuna bakın.

Dijital İmzayı Programlı Olarak Nasıl Doğrularsınız?

Bir belge imzalandı ve geri geldiğinde, imzanın hala geçerli olduğunu ve belgenin değiştirilmediğini doğrulamanız gerekebilir. IronPDF, PdfDocument nesnesi aracılığıyla imza doğrulaması sağlayarak açığa çıkarır:

using IronPdf;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/verify-signature", (IWebHostEnvironment env) =>
{
    string signedPath = Path.Combine(env.ContentRootPath, "Documents", "signed-contract.pdf");
    var document = PdfDocument.FromFile(signedPath);

    // Retrieve all embedded signatures
    var signatures = document.GetSignatures();

    foreach (var sig in signatures)
    {
        bool isValid = sig.VerifySignature();
        string status = isValid
            ? $"Valid -- signed by {sig.SignerName} on {sig.SigningTime:D}"
            : "INVALID -- document may have been tampered with";

        Console.WriteLine(status);
    }

    return Results.Ok(new { SignatureCount = signatures.Count });
});

app.Run();
using IronPdf;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/verify-signature", (IWebHostEnvironment env) =>
{
    string signedPath = Path.Combine(env.ContentRootPath, "Documents", "signed-contract.pdf");
    var document = PdfDocument.FromFile(signedPath);

    // Retrieve all embedded signatures
    var signatures = document.GetSignatures();

    foreach (var sig in signatures)
    {
        bool isValid = sig.VerifySignature();
        string status = isValid
            ? $"Valid -- signed by {sig.SignerName} on {sig.SigningTime:D}"
            : "INVALID -- document may have been tampered with";

        Console.WriteLine(status);
    }

    return Results.Ok(new { SignatureCount = signatures.Count });
});

app.Run();
Imports IronPdf
Imports Microsoft.AspNetCore.Builder
Imports Microsoft.AspNetCore.Hosting
Imports Microsoft.Extensions.Hosting

Dim builder = WebApplication.CreateBuilder(args)
Dim app = builder.Build()

app.MapGet("/verify-signature", Function(env As IWebHostEnvironment)
                                    Dim signedPath As String = Path.Combine(env.ContentRootPath, "Documents", "signed-contract.pdf")
                                    Dim document = PdfDocument.FromFile(signedPath)

                                    ' Retrieve all embedded signatures
                                    Dim signatures = document.GetSignatures()

                                    For Each sig In signatures
                                        Dim isValid As Boolean = sig.VerifySignature()
                                        Dim status As String = If(isValid,
                                            $"Valid -- signed by {sig.SignerName} on {sig.SigningTime:D}",
                                            "INVALID -- document may have been tampered with")

                                        Console.WriteLine(status)
                                    Next

                                    Return Results.Ok(New With {.SignatureCount = signatures.Count})
                                End Function)

app.Run()
$vbLabelText   $csharpLabel

GetSignatures(), PDF'e gömülü tüm dijital imzaların bir listesini döndürür. Her PdfDigitalSignature nesnesi, VerifySignature(), imzalayanın adını, imzalama zaman damgasını ve sertifika zincirini açığa çıkarır. Bu bilgi, değiştirilen veya süresi dolmuş imzalı PDF dosyalarını işaretleyen bir denetim izi veya belge yönetim panosu oluşturmak için yeterlidir.

Üretimde Sertifika Yönetimini Nasıl Ele Alırsınız?

Bir .pfx dosyasını dosya sisteminde depolamak geliştirme sırasında işe yarar ancak üretim için uygun değildir. Sertifika dosyaları özel anahtarları içerir ve eğer dosya tehlikeye girerse, o anahtarla imzalanmış her belge risk altındadır.

Azure Anahtar Kasası Kullanımı

Azure Anahtar Kasası, sertifikaları özel anahtar asla kasadan çıkmadan saklamanıza ve kullanmanıza olanak tanır. .NET SDK, kamuya açık sertifika bilgilerini indiren bir CertificateClient sağlar. Özel anahtarı Anahtar Kasası içinde tutan gerçek imzalama işlemleri için, Azure.Security.KeyVault.Keys paketini kullanarak kriptografik işlemi sunucu tarafında gerçekleştirebilirsiniz.

Çevresel Değişkenler ve Sırlar Kullanımı

Daha küçük projeler için, sertifikayı bir çevresel değişken veya ASP.NET Core Secrets Manager içinde Base64 kodlanmış bir dize olarak saklayın ve çalışma zamanında çözün:

string certBase64 = Environment.GetEnvironmentVariable("PDF_SIGNING_CERT")
    ?? throw new InvalidOperationException("PDF_SIGNING_CERT environment variable is not set.");

byte[] certBytes = Convert.FromBase64String(certBase64);
string certPassword = Environment.GetEnvironmentVariable("PDF_SIGNING_CERT_PASSWORD")
    ?? throw new InvalidOperationException("PDF_SIGNING_CERT_PASSWORD environment variable is not set.");

var signature = new PdfSignature(certBytes, certPassword);
string certBase64 = Environment.GetEnvironmentVariable("PDF_SIGNING_CERT")
    ?? throw new InvalidOperationException("PDF_SIGNING_CERT environment variable is not set.");

byte[] certBytes = Convert.FromBase64String(certBase64);
string certPassword = Environment.GetEnvironmentVariable("PDF_SIGNING_CERT_PASSWORD")
    ?? throw new InvalidOperationException("PDF_SIGNING_CERT_PASSWORD environment variable is not set.");

var signature = new PdfSignature(certBytes, certPassword);
Imports System

Dim certBase64 As String = Environment.GetEnvironmentVariable("PDF_SIGNING_CERT")
If certBase64 Is Nothing Then
    Throw New InvalidOperationException("PDF_SIGNING_CERT environment variable is not set.")
End If

Dim certBytes As Byte() = Convert.FromBase64String(certBase64)
Dim certPassword As String = Environment.GetEnvironmentVariable("PDF_SIGNING_CERT_PASSWORD")
If certPassword Is Nothing Then
    Throw New InvalidOperationException("PDF_SIGNING_CERT_PASSWORD environment variable is not set.")
End If

Dim signature = New PdfSignature(certBytes, certPassword)
$vbLabelText   $csharpLabel

Bu desen, kimlik bilgilerini kaynak kontrolünden uzak tutar ve dönüşümünü kolaylaştırır -- çevresel değişkeni güncelleyin ve hizmeti yeniden başlatın.

Birden Çok PDF'yi Verimli Şekilde Nasıl Toplu İmzalarsınız?

Bir işlemde onlarca veya yüzlerce belgeyi imzalamanız gerektiğinde - örneğin ay sonu tüm faturaları imzalama - sertifikayı bir kez yüklemek ve tüm belgeler arasında PdfSignature nesnesini yeniden kullanmak aşırı yükü azaltır:

using IronPdf;
using IronPdf.Signing;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapPost("/batch-sign", (IWebHostEnvironment env) =>
{
    string certPath = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx");
    var signature = new PdfSignature(certPath, "yourPassword")
    {
        SigningReason = "Batch Invoice Approval"
    };

    string[] invoicePaths = Directory.GetFiles(
        Path.Combine(env.ContentRootPath, "Invoices"),
        "*.pdf"
    );

    string outputDir = Path.Combine(env.ContentRootPath, "Signed");
    Directory.CreateDirectory(outputDir);

    foreach (string invoicePath in invoicePaths)
    {
        var doc = PdfDocument.FromFile(invoicePath);
        doc.Sign(signature);
        string outputFile = Path.Combine(outputDir, Path.GetFileName(invoicePath));
        doc.SaveAs(outputFile);
    }

    return Results.Ok(new { SignedCount = invoicePaths.Length });
});

app.Run();
using IronPdf;
using IronPdf.Signing;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapPost("/batch-sign", (IWebHostEnvironment env) =>
{
    string certPath = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx");
    var signature = new PdfSignature(certPath, "yourPassword")
    {
        SigningReason = "Batch Invoice Approval"
    };

    string[] invoicePaths = Directory.GetFiles(
        Path.Combine(env.ContentRootPath, "Invoices"),
        "*.pdf"
    );

    string outputDir = Path.Combine(env.ContentRootPath, "Signed");
    Directory.CreateDirectory(outputDir);

    foreach (string invoicePath in invoicePaths)
    {
        var doc = PdfDocument.FromFile(invoicePath);
        doc.Sign(signature);
        string outputFile = Path.Combine(outputDir, Path.GetFileName(invoicePath));
        doc.SaveAs(outputFile);
    }

    return Results.Ok(new { SignedCount = invoicePaths.Length });
});

app.Run();
Imports IronPdf
Imports IronPdf.Signing

Dim builder = WebApplication.CreateBuilder(args)
Dim app = builder.Build()

app.MapPost("/batch-sign", Function(env As IWebHostEnvironment)
    Dim certPath As String = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx")
    Dim signature As New PdfSignature(certPath, "yourPassword") With {
        .SigningReason = "Batch Invoice Approval"
    }

    Dim invoicePaths As String() = Directory.GetFiles(
        Path.Combine(env.ContentRootPath, "Invoices"),
        "*.pdf"
    )

    Dim outputDir As String = Path.Combine(env.ContentRootPath, "Signed")
    Directory.CreateDirectory(outputDir)

    For Each invoicePath As String In invoicePaths
        Dim doc = PdfDocument.FromFile(invoicePath)
        doc.Sign(signature)
        Dim outputFile As String = Path.Combine(outputDir, Path.GetFileName(invoicePath))
        doc.SaveAs(outputFile)
    Next

    Return Results.Ok(New With {.SignedCount = invoicePaths.Length})
End Function)

app.Run()
$vbLabelText   $csharpLabel

Döngü dışında bir kez PdfSignature nesnesi yaratmak, sertifika dosyasının yalnızca bir kez okunup ayrıştırıldığı anlamına gelir. Her yineleme, bir bireysel PDF'yi yükler, imza atar ve kaydeder. Çok büyük partiler için, belgeleri paralel işlemek üzere Parallel.ForEach kullanmayı düşünün - IronPDF'in imzalama işlemleri, her PdfDocument örneği tek bir iş parçacığı ile izole edildiğinde iş parçacığı güvenlidir.

Yaygın İmzalama Hataları Nasıl Giderilir?

"Sertifika bulunamadı" veya "Geçersiz şifre"

Sertifika yolunu File.Exists(certPath) kullanarak, PdfSignature çağrılmadan önce bir kez daha kontrol edin. Sertifika şifreleri büyük/küçük harf duyarlıdır ve tam olarak eşleşmelidir. Geliştirme ortamında, basit bir şifre ile kendinden imzalanmış bir sertifika oluşturmak yaygındır; üretimde, şifreyi bir sır olarak ele alın ve sır yöneticisinden yükleyin.

PDF Görüntüleyicide "İmza geçersiz"

Adobe Acrobat'teki bir "geçersiz imza" uyarısı çoğunlukla üç şey anlamına gelir: (1) sertifika görüntüleyicinin sertifika deposu tarafından güvenilir değil, (2) imzadan sonra belge değiştirildi, veya (3) imzalama sertifikasının süresi doldu. Üretim için, güvenilir bir sertifika otoritesinden sertifika almanız ve sistem saatinin senkronize olduğundan emin olmanız gerekmektedir. Geliştirme için, Adobe kendi imzalı sertifikaları geçici olarak güvenilir hale getirme talimatları sağlıyor.

Sign() çağrısı sonrası "Belge imzalanmamış"

document.Sign(signature) çağrılması belgeyi imzalama için işaretler, ancak imza yalnızca SaveAs çağrıldığında veya bir akışa kaydedildiğinde tamamlanır. Sign sonrası kaydetme yöntemini çağırdığınızdan emin olun ve çıktı dosya yolunun yazılabilir olduğunu doğrulayın.

Tüm API detayları ve sorun giderme kaynakları için IronPDF dokümantasyon merkezi ve IronPDF nesne referansını ziyaret edin. Desteğe ihtiyacınız varsa, IronPDF destek sayfası sizi mühendislik ekibiyle buluşturur.

Sonraki Adımlarınız Neler?

ASP.NET Core'da dijital PDF imzalama, bir sertifika yükleme, Sign çağrısı yapma ve sonucu kaydetme şeklindeki üç temel işlemi anladığınızda kolaylaşır. IronPDF, kriptografik ağır yükü kaldırır böylece siz uygulamanızın iş mantığına odaklanabilirsiniz.

Belge iş akışınızı geliştirmeye devam etmek için, bu ilgili konuları keşfedin:

ücretsiz IronPDF denemesi ile başlayın ve bir saatten kısa bir sürede ilk imzalı PDF'nizi çalıştırın. Sorularınız varsa veya sınır durumlarına rastlarsanız, Iron Software destek ekibi güvenilir, yasalara uygun bir belge imzalama iş akışınızın gönderilmesine yardımcı olmaya hazırdır.

Sıkça Sorulan Sorular

ASP.NET Core'da dijital imza nedir?

ASP.NET Core'da dijital imza, PDF belgelerinin özgünlüğünü ve bütünlüğünü doğrulamak için kullanılan dijital bir mühür gibidir. Belgelerin yasal geçerli olduğunu ve değiştirilmediğini sağlar.

IronPDF kullanarak bir PDF belgesine dijital imza nasıl ekleyebilirim?

PDF belgesine dijital imza eklemek için, belgeyi imzalayacak şekilde bir sertifika ekleyerek IronPDF kullanabilirsiniz, böylece hem güvenli hem de doğrulanabilir olur.

İş belgelerim için dijital imzalar neden önemlidir?

Dijital imzalar, belgelerin (örneğin sözleşmeler veya faturalar) sahte olmadığını ve değiştirildiğini doğruladığı için ö crucial önem taşır, böylece işinizi potansiyel yasal risklerden korur.

IronPDF ile PDF'lerde etkileşimli form alanları oluşturabilir miyim?

Evet, IronPDF, ASP.NET Core uygulamalarında kullanıcı etkileşimini artıran ve belge süreçlerini basitleştiren PDF'lerde etkileşimli form alanları oluşturmanıza olanak tanır.

PDF belgelerime görünür imza eklemek mümkün mü?

Evet, IronPDF ile, PDF belgelerinize görünür imzalar ekleyebilir, böylece alıcıların belgenin güvenli bir şekilde imzalandığı ve doğrulandığı konusunda açık hale gelebilir.

PDF'lerde dijital imzalar için hangi tür sertifikalar kullanılabilir?

Şirket içi kullanımlar veya daha yüksek güvenlik seviyesi gereklilikleri için güvenilir bir Sertifikasyon Otoritesi tarafından verilen sertifikalarla, öz imzalı sertifikalar da dahil olmak üzere PDF'lerde dijital imzalar için çeşitli türde sertifikalar kullanılabilir.

IronPDF, PDF belgesinin değiştirilmediğinden nasıl emin olur?

IronPDF, bir PDF belgesinin değiştirilmediğinden emin olmak için belgenin bütünlüğünü ve özgünlüğünü doğrulayan dijital imzaları kullanır, alıcılara belgenin imzalandıktan sonra değişiklik yapıldıysa uyarır.

ASP.NET Core uygulamalarında dijital imzalama sürecini otomatikleştirebilir miyim?

Evet, IronPDF kullanarak ASP.NET Core uygulamalarında dijital imzalama sürecini otomatikleştirebilirsiniz, bu da toplu işleme ve mevcut iş akışlarına entegrasyon sağlar.

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

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara