코드 서명
모든 EPPlus 릴리스는 GlobalSign이 EPPlus Software AB에 발급한 코드 서명 인증서로 디지털 서명됩니다. 이 규칙은 모든 분산 어셈블리와 NuGet 패키지 자체에 적용되며, 여러분이 사용하는 것이 저희가 직접 제작하고 배포했는지 독립적으로 검증할 수 있게 해줍니다.
왜 우리가 동의서에 서명하는지
소프트웨어 공급망 공격 — 공격자가 퍼블리셔와 최종 사용자 간의 패키지를 조작하는 공격 — 은 점점 더 큰 위협으로 증가하고 있습니다. 디지털 서명은 다운로드한 파일이 우리가 만들고 공개한 것과 동일하다는 암호화 보증을 제공합니다. 또한 출판사의 신원을 확인시켜 줍니다: 서명은 신뢰할 수 있는 인증서 기관이 EPPlus Software AB에 발급한 인증서 소지자만이 생성할 수 있습니다. 서명 후 파일이 수정되었거나 저희가 서명한 적이 없다면 검증이 실패합니다.
서명된 내용
EPPlus 릴리스에 포함된 모든 어셈블리는 지원되는 모든 대상 프레임워크에서 서명됩니다. NuGet 패키지는 패키지 수준 서명으로 별도로 서명되며, 전체 패키지 내용을 포함합니다.
특정 릴리스에 포함된 어셈블리와 대상 프레임워크의 정확한 집합은 해당 릴리스의 소프트웨어 자재 명세 서에 명시되어 있습니다.
증명서
이 서명 인증서는 전 세계적으로 신뢰받는 인증 기관인 GlobalSign에서 발급됩니다. 인증서는 하드웨어 백업 키 저장소에 안전하게 저장되며, 자동화된 릴리스 파이프라인의 일부로만 접근할 수 있습니다 — 개인 키는 보안 환경을 벗어나지 않습니다.
| 발속 대상 | EPPlus Software AB |
|---|---|
| 발행 | GlobalSign GCC R45 CodeSigning CA 2020 |
| 다이제스트 알고리즘 | SHA-256 |
| 타임스탬프 권한 | GlobalSign TSA for Advanced - G4 |
모든 서명에는 GlobalSign의 신뢰할 수 있는 타임스탬프가 포함되어 있습니다. 이는 서명이 유효한 기간 내에 생성된 한 서명이 갱신된 후에도 서명이 계속 검증 가능하도록 보장합니다. 위의 인증서 세부 정보는 현재 서명 인증서를 반영한 것이며, 발행자와 타임스탬프 권한은 갱신 시 변경될 수 있습니다.
NuGet 저장소 카운터서명
자체 저자 서명 외에도, 패키지가 게시될 때 자동으로 저장소 카운터서명을 추가 NuGet.org. 이 부서명은 NuGet.org 에서 발행하며, 패키지가 EPPlus 패키지의 등록 소유자에 의해 NuGet.org 에 업로드되었음을 확인합니다. 패키지를 검증하면 EPPlus Software AB의 저자 서명과 NuGet.org 의 저장소 부서명 두 서명 모두를 볼 수 있습니다.
EPPlus 패키지의 등록된 소유자를 nuget.org/packages/EPPlus 에서 독립적으로 확인할 수 있습니다.
검증이 실패할 경우
검증 실패는 서명 후 파일이 수정되었거나, 서명이 누락되었거나, 인증서 체인을 신뢰할 수 없음을 의미합니다. 검증에 실패하는 패키지나 어셈블리는 사용하지 마세요. 출판된 EPPlus 릴리스가 조작되었다고 생각되는 만한 이유가 있다면 즉시 저희에게 신고해 주시기 바랍니다.
연락 방법은 취 약점 공개 정책을 참고하세요.
직접 해제 여부를 확인하세요
저희에 의존하지 않고도 표준 도구를 사용해 EPPlus 릴리스의 서명을 독립적으로 검증할 수 있습니다.
NuGet 패키지 검증
EPPlus 릴리스를 검증하는 가장 간단한 방법은 .NET CLI를 사용해 NuGet 패키지 서명을 검증하는 것입니다. 이 방법은 Windows, Linux, macOS에서 작동합니다.
dotnet nuget verify EPPlus.<version>.nupkg --verbosity detailed
성공적으로 검증된 패키지는 EPPlus Software AB의 저자 서명과 NuGet.org 의 저장소 부서명을 모두 보여줍니다:
X.509 certificate chain validation will use the default trust store selected by .NET for code signing.
X.509 certificate chain validation will use the default trust store selected by .NET for timestamping.
Verifying EPPlus.<version>
Signature Hash Algorithm: SHA256
Signature type: Author
Verifying the author primary signature with certificate:
Subject Name: CN=EPPlus Software AB, O=EPPlus Software AB, L=Stockholm, C=SE
Issued by: CN=GlobalSign GCC R45 CodeSigning CA 2020, O=GlobalSign nv-sa, C=BE
Signature type: Repository
Service index: https://api.nuget.org/v3/index.json
Owners: EPPlusSoftware, jankallman, swmal
Successfully verified package 'EPPlus.<version>'.
조립체 검증
Windows에서는 개별 어셈블리를 PowerShell을 사용해 직접 검증할 수도 있습니다. 이 방법은 Windows 신뢰 저장소를 사용하여 암호화 서명과 인증서 신뢰 체인을 모두 검증합니다.
Get-AuthenticodeSignature "path\to\EPPlus.dll" | Format-List *
유효한 서명은 Status: Valid와 GlobalSign이 EPPlus Software AB에 발급한 서명자 인증서를 표시합니다:
SignerCertificate : [Subject]
CN=EPPlus Software AB, O=EPPlus Software AB, L=Stockholm, C=SE
[Issuer]
CN=GlobalSign GCC R45 CodeSigning CA 2020, O=GlobalSign nv-sa, C=BE
...
Status : Valid
StatusMessage : Signature verified.
SignatureType : Authenticode
어셈블리 수준 검증은 PowerShell에서만 가능합니다. Linux와 macOS에서는 위에서 설명한 dotnet nuget verify를 사용하여 NuGet 패키지를 검증하는 것을 권장하며, 이 방법은 모든 플랫폼에서 작동합니다.