코드 서명
모든 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 패키지를 검증하는 것을 권장하며, 이 기능은 모든 플랫폼에서 작동합니다.