signtool sign komut referansı
Bu makaledeki 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 belirtilecektir.
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ü görüntüle:
signtool --help
signtool --version
Kimlik Bilgisi Yapılandırması
sign komutu erişim kimlik bilgilerini aşağıdaki yollarla okur:
| Kimlik Öğesi | Parametre | Ortam Değişkeni | Açıklama |
|---|---|---|---|
| Access Key | --access-key / -k | ACCESS_KEY | Parametre boşsa ortam değişkeni otomatik olarak okunur |
| Access Secret | --access-secret / -s | ACCESS_SECRET | Parametre boşsa ortam değişkeni otomatik olarak okunur |
export ACCESS_KEY="your-access-key"
export ACCESS_SECRET="your-access-secret"
Uzak hizmet adresi --address parametresi tarafından kontrol edilir ve aşağıdaki değerleri destekler:
| Parametre değeri | Gerçek hizmet 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çekte okunan ortam değişkeni adlarıdır;SIGNTOOL_ACCESS_KEY/SIGNTOOL_ACCESS_SECRETmevcut CLI tarafından otomatik olarak okunmaz.- Access Secret'ı shell geçmişine veya betik deposuna yazmanız önerilmez; çalışma zamanında enjekte edilen ortam değişkenlerini veya güvenli CI değişkenlerini tercih edin.
Parametre Açıklaması
| Parametre | Kısa Yazım | Varsayılan Değer | Açıklama |
|---|---|---|---|
--address | -a | Boş | Uzak hizmet adresi tanımlayıcısı; URL geçiş 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 dosyanın yolu; dizin olamaz. |
--out | -o | boş | Çıktı dosyası yolu; boşsa ve üzerine yazma etkin değilse varsayılan dosya adı otomatik oluşturulur. |
--override | — | false | Çıktı dosyası orijinal dosyanın üzerine yazar. |
--sha1 | -1 | false | SHA1 imzasını etkinleştirin. |
--sha2 | -2 | true | SHA2 imzasını etkinleştirin. |
--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ş | İmza için yazılan program bilgisi URL'si. |
--nest | — | true | Mevcut imzayı koruyup iç içe imza ekler; false olduğunda mevcut imzayı temizler. |
--verify | — | false | İmza eklenirken sertifika güvenilir değilse hata döndürür. |
--dry-run | — | false | Yerel test sertifikası kullanarak imza üretir, uzak imza arayüzü çağrılmaz. |
Boole parametreler 参数=值 formatında kullanılmalıdır, boşlukla ayrım 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 verilir ve işlem sonlandırılır:
--access-keyveyaACCESS_KEYbulunmalıdır.--access-secretveyaACCESS_SECRETmevcut olmalıdır.--cert-codemevcut olmalıdır.--filemevcut olmalıdır ve bir dizin olmamalıdır.--sha1ve--sha2seçeneklerinden en az biri etkinleştirilmelidir.
Çıktı Dosyası Kuralları
--out belirtilmediğinde:
--override | Çıktı Davranışı |
|---|---|
false (varsayılan) | Girdi dosyasıyla aynı dizine, dosya adı ${name}.signed.${yyyyMMdd.HHmmss}${ext} olacak şekilde çıktı verir |
true | Girdi 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 yazar; çalıştırmadan önce yedeğinizi aldığınızdan emin olun. İmzalama 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 imzalama:
signtool sign -c CERT_CODE -f app.exe --sha1=true --sha2=true
SHA1 ve SHA2 aynı anda etkinleştirildiğinde süreç önce SHA1'i, ardından SHA2'yi işler. SHA1 şu anda hâlâ desteklenmektedir, ancak yeni imzalama senaryolarında SHA2'ye öncelik verilir.
Zaman Damgası Yapılandırması
--timestamp ve --timestamp-rfc3161 öğelerinin auto değeri doğrulama aşamasında varsayılan adresle değiştirilir:
| Parametre | auto gerçek değer | Amaç |
|---|---|---|
--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ın:
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 öncelikle
--timestampkullanır; bu bir HTTP adresi değilse--timestamp-rfc3161denenir. - SHA2,
--timestamp-rfc3161kullanır. - SHA2'ye zaman damgası eklenemediğinde Microsoft ve Sectigo varsayılan adresleri arasında otomatik olarak bir kez yeniden denenir.
- Zaman damgası hatası imzanın mutlaka başarısız olacağı anlamına gelmez; CLI hatayı kaydeder ve zaman damgası eklenmemiş imza sonucunu korur.
Sık Kullanılan Örnekler
Kimlik bilgilerini ortam değişkenleriyle sağlayın, 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
Kimlik bilgilerini doğrudan parametrelerle sağlayın:
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
Program 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"
Ek iç içe imza ekleyin (mevcut imzayı koruyun):
signtool sign -c CERT_CODE -f app.exe --nest=true
Kaynak dosyanın üzerine yaz:
signtool sign -c CERT_CODE -f app.exe --override=true
dry-run yerel test imzalama (uzak arayüz çağrılmaz):
signtool sign \
-k dummy \
-s dummy \
-c CERT_CODE \
-f app.exe \
--dry-run=true
--dry-run uzak imzalama arayüzünü çağırmaz, ancak yine de yerel dosyaları okur/yazar ve yerel kendinden imzalı sertifikayı çağırır. Şu anda kimlik bilgisi ve sertifika numarası boş olmama doğrulamasından geçmeye devam eder, bu nedenle örnekte yer tutucu kimlik bilgisi kullanılmıştır.
Sorun Giderme Referansı
| Hata Mesajı | Olası Neden | Çözüm Önerisi |
|---|---|---|
access key is required... | --access-key iletilmemiş ve ACCESS_KEY ayarlanmamış. | Ortam değişkenini ayarlayın veya -k kullanın. |
access secret is required... | --access-secret geçilmedi ve ACCESS_SECRET de ayarlanmadı. | Ortam değişkenini ayarlayın veya -s kullanın. |
cert code is required... | Sertifika numarası geçilmedi. | -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 dosya yerine dizini işaret ediyor. | İmzalanacak dosyanın yolunu belirtin. |
| 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ğiştirin. |