npm paketleri, Windows programları gibi bir CA kod imzalama sertifikasıyla imzalanmaz. Bunun yerine npm kayıt defteri paket metaverisini kendi anahtarlarıyla imzalar ve yayıncılar için bir kaynak kanıtı (provenance) mekanizması sunar. Bu yüzden "npm paket imzalama" daha çok tedarik zinciri doğrulaması anlamına gelir.
Kayıt defteri imzalarını doğrulama
npm audit signatures
Bu komut proje bağımlılıklarının kayıt defteri imzalarını ve varsa provenance kanıtlarını kontrol eder. Yeni bir npm sürümü gerektirebilir.
Provenance ile yayınlama
Desteklenen bir CI sağlayıcısından (ör. GitHub Actions) yayın yaparken paketin hangi kaynak depodan ve hangi derleme sürecinden geldiği kanıtlanabilir:
npm publish --provenance --access public
CI iş akışında kimlik belirteci izni (id-token: write) verilmesi gerekir.
Ek önlemler
- Hesapta iki faktörlü doğrulamayı zorunlu tutun.
- Yayın belirteçlerini (token) en dar yetkiyle ve kısa ömürlü oluşturun.
package-lock.jsondosyasını depoya ekleyin,npm cikullanın.- Bağımlılıkları düzenli
npm auditile denetleyin.
Kod imzalama sertifikası nerede devreye girer?
npm ile dağıttığınız ürün bir masaüstü uygulaması ise (örneğin Electron ile paketlenmiş bir .exe), o yürütülebilir dosya Windows için ayrıca kod imzalama sertifikasıyla imzalanır. Paket kayıt defteri imzası ile son kullanıcıya giden .exe imzası farklı katmanlardır.
Yayın hattı için öneriler
- Yayınlamadan önce
npm pack --dry-runile pakete hangi dosyaların girdiğini kontrol edin. - Sürümleri değiştirilemez kabul edin; hatalı sürümü tekrar yayınlamak yerine yeni sürüm çıkarın.
- Kamuya açık paketlerde kapsam (scope) kullanımı, isim taklidi riskini azaltır.
- Bağımlılık güncellemelerini otomatik ama incelenen pull request'lerle yönetin.
Masaüstü tarafı için kod imzalama sertifikalarına bakabilir, konuyla ilgili diğer yazıları bilgi bankasında bulabilirsiniz.
Özet: npm ekosisteminde güven, klasik sertifika imzasından çok kayıt defteri imzaları, provenance ve sıkı hesap güvenliğiyle sağlanır. Masaüstü ürün çıktıları ise ayrıca kod imzalama sertifikasıyla imzalanmalıdır.