signtool sign komut referansı
Bu belgedeki signtool, sslTrus uzaktan kod imzalama istemcisi CLI'sını ifade eder; Microsoft Windows SDK ile birlikte gelen signtool.exe değildir. Windows SDK aracı kullanıldığında açıkça Microsoft signtool.exe olarak yazılır.
signtool sign, yerel dosyalar üzerinde doğrudan uzaktan imzalama gerçekleştirir. CLI, imzalanacak verileri yerel olarak çıkarır, özel anahtar imzasını tamamlamak için uzak hizmeti çağırır ve ardından imzayı, zaman damgasını ve sertifika bilgilerini çıktı dosyasına geri yazar.
signtool sign [flags]
Yardımı ve sürüm bilgilerini görüntüleyin:
signtool --help
signtool --version
Kimlik Bilgisi Yapılandırması
sign komutu erişim kimlik bilgilerini aşağıdaki yöntemlerle okur:
| Kimlik Bilgisi Öğesi | Parametre | Ortam Değişkeni | Açıklama |
|---|---|---|---|
| Erişim Anahtarı | --access-key / -k | ACCESS_KEY | Parametre boşsa ortam değişkeni otomatik okunur |
| Erişim Gizli Anahtarı | --access-secret / -s | ACCESS_SECRET | Parametre boşsa ortam değişkeni otomatik okunur |
export ACCESS_KEY="your-access-key"
export ACCESS_SECRET="your-access-secret"
Uzaktan servis adresi, --address parametresi tarafından kontrol edilir ve şu değerleri destekler:
| Parametre Değeri | Gerçek Servis Adresi |
|---|---|
nicsrs | https://ssl.face.nicsrs.com |
Boş değer, racent veya diğer herhangi bir değer | https://ssl.face.racent.com |
ACCESS_KEYveACCESS_SECRETgerçekten okunan ortam değişkeni adlarıdır;SIGNTOOL_ACCESS_KEY/SIGNTOOL_ACCESS_SECRETmevcut CLI tarafından otomatik olarak okunmaz.- Access Secret'in shell geçmişine veya script deponuza yazılması önerilmez; çalışma zamanı enjeksiyonlu ortam değişkenlerini veya güvenli CI değişkenlerini öncelikli kullanın.
Parametre Açıklamaları
| Parametre | Kısa Yazım | Varsayılan Değer | Açıklama |
|---|---|---|---|
--address | -a | Boş | Uzak hizmet adresi tanımlayıcısıdır; URL iletim parametresi değildir. |
--access-key | -k | Boş | Boş olduğunda ACCESS_KEY okunur. |
--access-secret | -s | Boş | Boş olduğunda ACCESS_SECRET okunur. |
--cert-code | -c | Boş | Zorunlu. Sertifika numarası. |
--file | -f | Boş | Zorunlu. İmzalanacak dosya yolu; dizin olamaz. |
--out | -o | Boş | Çıktı dosyası yolu; boşsa ve üzerine yazma etkinleştirilmemişse otomatik olarak varsayılan dosya adı oluşturulur. |
--override | — | false | Çıktı dosyası, orijinal dosyanın üzerine yazılır. |
--sha1 | -1 | false | SHA1 imzasını etkinleştir. |
--sha2 | -2 | true | SHA2 imzasını etkinleştir. |
--timestamp | — | auto | SHA1 Authenticode zaman damgası adresi. auto varsayılan adresi kullanır, boş dize devre dışı bırakır. |
--timestamp-rfc3161 | — | auto | SHA2 RFC3161 zaman damgası adresi. auto varsayılan adresi kullanır, boş dize devre dışı bırakır. |
--desc | -n | Boş | İmzaya yazılan program açıklama metni. |
--url | -u | Boş | İmzayı yazan program bilgisi URL'si. |
--nest | — | true | Mevcut imzayı korur ve iç içe imza ekler; false olduğunda mevcut imzayı temizler. |
--verify | — | false | İmza eklerken sertifika güvenilir değilse hata döndürür. |
--dry-run | — | false | Yerel test sertifikası kullanarak imza üretir, uzak imza API'sini çağırmaz. |
Boole parametreleri 参数=值 formatını kullanmalıdır, boşlukla ayrılmış şekilde desteklenmez:
- Doğru:
--sha1=true --sha2=false - Yanlış:
--sha1 true --sha2 false
Zorunlu Kurallar
Yürütmeden önce aşağıdaki koşullar doğrulanır; herhangi biri karşılanmazsa hata ile çıkış yapılır:
--access-keyveyaACCESS_KEYmevcut olmalıdır.--access-secretveyaACCESS_SECRETzorunludur.--cert-codezorunludur.--filezorunludur ve bir dizin olamaz.--sha1ve--sha2en az bir tanesi etkinleştirilmelidir.
Çıktı Dosyası Kuralları
--out belirtilmediğinde:
--override | Çıktı davranışı |
|---|---|
false(varsayılan) | Giriş dosyasıyla aynı dizine çıktı verir, dosya adı ${name}.signed.${yyyyMMdd.HHmmss}${ext} şeklindedir |
true | Giriş dosyasını doğrudan üzerine yazar |
Örnek:
app.exe → app.signed.20260611.153000.exe
driver.sys → driver.signed.20260611.153000.sys
--override=true orijinal dosyanın üzerine yazacaktır, çalıştırmadan önce yedek aldığınızdan emin olun. İmza başarısız olduğunda CLI, tamamlanmamış çıktı dosyalarını mümkün olduğunca silmeye çalışır.
Algoritma Seçimi
Varsayılan olarak yalnızca SHA2 etkindir:
signtool sign -c CERT_CODE -f app.exe
Yalnızca SHA1 imzala:
signtool sign -c CERT_CODE -f app.exe --sha1=true --sha2=false
SHA1 ve SHA2'yi aynı anda imzala:
signtool sign -c CERT_CODE -f app.exe --sha1=true --sha2=true
SHA1 ve SHA2 aynı anda etkinleştirildiğinde, işlem önce SHA1'i, ardından SHA2'yi işler. SHA1 hâlâ desteklenmektedir, ancak yeni imza senaryolarında öncelik SHA2'dedir.
Zaman Damgası Yapılandırması
--timestamp ve --timestamp-rfc3161 içindeki auto değeri, doğrulama aşamasında varsayılan adresle değiştirilir:
| Parametre | auto Gerçek Değeri | Kullanım Amacı |
|---|---|---|
--timestamp | http://timestamp.sectigo.com | SHA1 Authenticode zaman damgası |
--timestamp-rfc3161 | http://timestamp.sectigo.com | SHA2 RFC3161 zaman damgası |
Özel SHA2 zaman damgası hizmeti:
signtool sign \
-c CERT_CODE \
-f app.exe \
--timestamp-rfc3161=http://timestamp.acs.microsoft.com
SHA2 zaman damgasını kapat:
signtool sign -c CERT_CODE -f app.exe --timestamp-rfc3161=
Tüm zaman damgalarını kapatın:
signtool sign -c CERT_CODE -f app.exe --timestamp= --timestamp-rfc3161=
- Yalnızca
httpile başlayan zaman damgası adresleri kullanılır. - SHA1 öncelikli olarak
--timestampkullanır; eğer bu bir HTTP adresi değilse--timestamp-rfc3161kullanılmayı dener. - SHA2,
--timestamp-rfc3161kullanır. - SHA2 zaman damgası ekleme başarısız olursa, Microsoft ve Sectigo varsayılan adresleri arasında otomatik olarak bir kez yeniden denenir.
- Zaman damgası başarısızlığı imzayı mutlaka başarısız kılmaz; CLI hatayı kaydeder ve zaman damgası eklenmemiş imza sonucunu korur.
Yaygın Örnekler
Çevre değişkenleri ile kimlik bilgileri sağlayarak varsayılan SHA2 imzalama:
export ACCESS_KEY="your-access-key"
export ACCESS_SECRET="your-access-secret"
signtool sign \
--cert-code CERT_CODE \
--file app-unsigned.exe \
--out app-signed.exe
Parametrelerle doğrudan kimlik bilgisi sağlama:
signtool sign \
--access-key "your-access-key" \
--access-secret "your-access-secret" \
--cert-code CERT_CODE \
--file app-unsigned.exe \
--out app-signed.exe
NICSRS adresini kullanın:
signtool sign \
--address nicsrs \
--cert-code CERT_CODE \
--file app-unsigned.exe \
--out app-signed.exe
程序 açıklamasını ve resmi web sitesi URL'sini yazın:
signtool sign \
-c CERT_CODE \
-f app-unsigned.exe \
-o app-signed.exe \
--desc "Example Application" \
--url "https://example.com"
İç içe imza ekleme (mevcut imzayı koruyarak):
signtool sign -c CERT_CODE -f app.exe --nest=true
Orijinal dosyayı üzerine yaz:
signtool sign -c CERT_CODE -f app.exe --override=true
dry-run ile yerel deneme imzası (uzak API çağrılmaz):
signtool sign \
-k dummy \
-s dummy \
-c CERT_CODE \
-f app.exe \
--dry-run=true
--dry-run uzak imza API'sini çağırmaz, ancak yine de yerel dosyaları okur/yazar ve yerel olarak imzalanmış sertifikayı çağırır. Şu anda kimlik bilgisi ve sertifika numarası boş olmayan doğrulaması hâlâ yapılmaktadır, bu nedenle örnekte yer tutucu kimlik bilgileri kullanılmıştır.
Sorun Giderme Referansı
| Hata Mesajı | Olası Neden | Önerilen Çözüm |
|---|---|---|
access key is required... | --access-key iletilmedi ve ACCESS_KEY de ayarlanmadı. | Ortam değişkenini ayarlayın veya -k kullanın. |
access secret is required... | --access-secret parametresi iletilmedi ve ACCESS_SECRET ayarlanmadı. | Ortam değişkenini ayarlayın veya -s kullanın. |
cert code is required... | Sertifika numarası iletilmedi. | -c CERT_CODE kullanın. |
sha1 or sha2 is required... | SHA1 ve SHA2 aynı anda kapatıldı. | En az bir algoritmayı etkinleştirin. |
file <path> is a directory | --file bir dizini işaret ediyor, dosyayı değil. | İmzalanacak dosyanın yoluna değiştirin. |
| Zaman damgası başarısız ancak imza dosyası oluşturuldu | Zaman damgası hizmeti kullanılamıyor veya sertifika zinciri doğrulaması başarısız. | Zaman damgası URL'sini kontrol edin, gerekirse --timestamp-rfc3161 değerini değiştirin. |