우리는 GroupDocs.Signature for .NET v26.9의 출시를 기쁘게 발표합니다. 이번 릴리스는 2026년 9월에 제공됩니다. 이 업데이트는 보안에 중점을 둔 업데이트로 .NET 10 지원을 도입하고 .NET Standard 2.1을 중단했으며 외부 리소스 로드, 해시 알고리즘 및 인증서 검증에 대한 더 엄격한 기본값을 적용합니다. 또한 Word 문서를 포스트-양자(ML-DSA) 인증서로 서명하는 기능을 추가하고 검증, 로깅 및 플랫폼별 동작과 관련된 여러 중요한 버그를 해결했습니다.

이번 릴리스의 새로운 기능

  • [Feature] .NET 10 지원 및 .NET Standard 2.1 중단 (SIGNATURENET-5938)
  • [Enhancement] 외부 리소스가 기본적으로 로드되지 않음 (SIGNATURENET-5950)
  • [Enhancement] PDF 디지털 서명은 기본적으로 SHA-256을 사용하고 HashAlgorithm을 존중 (SIGNATURENET-5976)
  • [Enhancement] SignatureFont가 .NET 6 이상에서 System.Drawing 타입을 더 이상 노출하지 않음 (SIGNATURENET-5943)
  • [Enhancement] 만료되었거나 아직 유효하지 않은 인증서로 서명하는 경우 기본적으로 거부 (SIGNATURENET-5995)
  • [Enhancement] 포스트-양자(ML-DSA) 인증서로 Word 문서 서명 (SIGNATURENET-5996)
  • [Bug] PDF 디지털 서명을 암호학적으로 검증하지 않음 (SIGNATURENET-5978)
  • [Bug] PDF 문서 검증 시 SubjectName 및 IssuerName이 무시됨 (SIGNATURENET-5997)
  • [Bug] 타임스탬프 서버 자격 증명이 사용자 이름과 비밀번호가 모두 설정된 경우에만 전송됨 (SIGNATURENET-5998)
  • [Bug] Linux 및 macOS에서 프레젠테이션 및 Word 문서를 이미지로 저장할 때 실패 (SIGNATURENET-5999)
  • [Bug] 아카이브 내부 문서에 대해 LoadExternalResources가 무시됨 (SIGNATURENET-6000)
  • [Bug] SVG 이미지의 외부 이미지 및 스타일시트가 항상 로드됨 (SIGNATURENET-6001)
  • [Bug] 연결된 그림이 있는 스프레드시트 검색 및 검증 시 ArgumentNullException 발생 (SIGNATURENET-6002)
  • [Bug] CertificateVerifyOptions.Expired가 로컬 UTC 오프셋으로 잘못 계산됨 (SIGNATURENET-6003)
  • [Bug] SignatureSettings.LogLevel이 효과가 없었음 (SIGNATURENET-6004)
  • [Bug] 재사용된 VerifyOptions가 이전에 검증된 문서의 서명을 보고함 (SIGNATURENET-6005)
  • [Bug] 재사용된 DigitalSignOptions가 첫 번째 인증서와 주석으로 이후 프레젠테이션에 서명함 (SIGNATURENET-6006)
  • [Enhancement] 내부 개선 (SIGNATURENET-5979)

Public API 변경 사항

멤버 변경 내용
LoadOptions.SkipExternalResources 신규. bool, 기본값 true. true인 경우 WhitelistedResources와 일치하는 경우를 제외하고 외부 리소스를 로드하지 않음.
LoadOptions.WhitelistedResources 신규. List<string>, 기본값 비어 있음. SkipExternalResources가 true일 때 로드될 수 있는 주소 부분. 주소에 이 중 하나가 포함되면(대소문자 무시) 로드됨. null을 설정하면 목록이 비워짐.
LoadOptions.LoadExternalResources Obsolete. 여전히 작동하지만 SkipExternalResources와 반대 의미임. 기본값이 true에서 false로 변경됨. 사용 시 컴파일러 경고 CS0618 발생.
SignatureFont implicit conversion from System.Drawing.Font 제거됨 .NET 6, .NET 8 및 .NET 10 빌드에서. .NET Framework 빌드에서는 Obsolete. 대신 SignatureFont 속성을 직접 할당하세요.
SignOptions.HashAlgorithm 서명 자체 변경 없음. 이제 PDF 디지털 서명에 적용되며, 이전에는 무시되었음.
DigitalVerifyOptions.SubjectName, DigitalVerifyOptions.IssuerName 서명 자체 변경 없음. 이제 PDF 문서에 적용되며, 이전에는 무시되었음.
SignatureSettings.LogLevel 서명 자체 변경 없음. 이제 포함된 레벨의 메시지만 로거에 전달되고, LogLevel.None은 아무 것도 기록하지 않음. 이전에는 값에 관계없이 모든 메시지가 기록되었음. LogLevel 값 설명이 수정됨.
VerificationResult.Succeeded, VerificationResult.TotalSignatures 서명 자체 변경 없음. 하나의 VerifyOptions 객체를 여러 Verify 호출에 재사용할 경우, 이제 방금 검증한 문서의 서명만 표시함.
DigitalSignOptions.AllowExpired 신규. bool, 기본값 false. false이면 유효 기간이 끝난 인증서로 서명 시 GroupDocsSignatureException이 발생함. true이면 문서가 서명되고 경고가 기록됨.
DigitalSignOptions.AllowNotYetValid 신규. bool, 기본값 false. 아직 유효 기간이 시작되지 않은 인증서에 대해 동일하게 동작함.

새로운 기능

What’s new in this release와 Public API changes에 나열된 내용 외에 새로운 기능은 없습니다.

코드 예제

신뢰할 수 있는 외부 리소스만 허용:

LoadOptions loadOptions = new LoadOptions
{
    WhitelistedResources = new List<string> { "https://cdn.example.com/images/" }
};
using (Signature signature = new Signature("sample.docx", loadOptions))
{
    // Only images from https://cdn.example.com/images/ are loaded.
}

SHA-384로 서명하고 만료된 인증서를 사용 (경고 포함):

using (Signature signature = new Signature("sample.pdf"))
{
    DigitalSignOptions options = new DigitalSignOptions("certificate.pfx")
    {
        Password = "1234567890",
        HashAlgorithm = HashAlgorithm.Sha384 // honoured from this release; the default is SHA-256
    };
    signature.Sign("signed.pdf", options);
}

만료된 인증서를 명시적으로 허용하여 서명:

SignatureSettings settings = new SignatureSettings(new ConsoleLogger());
using (Signature signature = new Signature("sample.pdf", settings))
{
    DigitalSignOptions options = new DigitalSignOptions("certificate.pfx")
    {
        Password = "1234567890",
        AllowExpired = true
    };
    signature.Sign("signed.pdf", options);
    // If certificate.pfx has expired, the document is signed and the console shows a warning such as:
    // The signing certificate expired on 2019-05-01 12:00 UTC (subject "CN=...", thumbprint ...).
}

포스트-양자 ML-DSA 인증서로 Word 문서 서명:

using (Signature signature = new Signature("sample.docx"))
{
    DigitalSignOptions options = new DigitalSignOptions("ml-dsa-65.pfx")
    {
        Password = "1234567890"
    };
    signature.Sign("signed.docx", options);
}

오류와 경고만 표시하도록 로깅 구성:

SignatureSettings settings = new SignatureSettings(new ConsoleLogger())
{
    // Errors and warnings, without the step-by-step traces.
    LogLevel = LogLevel.Error | LogLevel.Warning
};

업데이트 받는 방법

NuGet

NuGet을 통해 최신 GroupDocs.Signature 패키지로 업그레이드: GroupDocs.Signature 26.9.0

설치 명령:

dotnet add package GroupDocs.Signature --version 26.9.0

직접 다운로드

GroupDocs.Signature for .NET 26.9 페이지에서 어셈블리를 다운로드

리소스