Ana içeriğe geç

signtool sign komut referansı

Açıklama

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 ÖğesiParametreOrtam DeğişkeniAçıklama
Erişim Anahtarı--access-key / -kACCESS_KEYParametre boşsa ortam değişkeni otomatik okunur
Erişim Gizli Anahtarı--access-secret / -sACCESS_SECRETParametre 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ğeriGerçek Servis Adresi
nicsrshttps://ssl.face.nicsrs.com
Boş değer, racent veya diğer herhangi bir değerhttps://ssl.face.racent.com
Not
  • ACCESS_KEY ve ACCESS_SECRET gerçekten okunan ortam değişkeni adlarıdır; SIGNTOOL_ACCESS_KEY / SIGNTOOL_ACCESS_SECRET mevcut 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ı​

ParametreKısa YazımVarsayılan DeğerAçıklama
--address-aBoşUzak hizmet adresi tanımlayıcısıdır; URL iletim parametresi değildir.
--access-key-kBoşBoş olduğunda ACCESS_KEY okunur.
--access-secret-sBoşBoş olduğunda ACCESS_SECRET okunur.
--cert-code-cBoşZorunlu. Sertifika numarası.
--file-fBoşZorunlu. İmzalanacak dosya yolu; dizin olamaz.
--out-oBoşÇı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-1falseSHA1 imzasını etkinleştir.
--sha2-2trueSHA2 imzasını etkinleştir.
--timestamp—autoSHA1 Authenticode zaman damgası adresi. auto varsayılan adresi kullanır, boş dize devre dışı bırakır.
--timestamp-rfc3161—autoSHA2 RFC3161 zaman damgası adresi. auto varsayılan adresi kullanır, boş dize devre dışı bırakır.
--desc-nBoşİmzaya yazılan program açıklama metni.
--url-uBoşİmzayı yazan program bilgisi URL'si.
--nest—trueMevcut 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—falseYerel test sertifikası kullanarak imza üretir, uzak imza API'sini çağırmaz.
Boole Parametre Formatı

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-key veya ACCESS_KEY mevcut olmalıdır.
  • --access-secret veya ACCESS_SECRET zorunludur.
  • --cert-code zorunludur.
  • --file zorunludur ve bir dizin olamaz.
  • --sha1 ve --sha2 en 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
trueGiriş dosyasını doğrudan üzerine yazar

Örnek:

app.exe    → app.signed.20260611.153000.exe
driver.sys → driver.signed.20260611.153000.sys
Dikkat

--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:

Parametreauto Gerçek DeğeriKullanım Amacı
--timestamphttp://timestamp.sectigo.comSHA1 Authenticode zaman damgası
--timestamp-rfc3161http://timestamp.sectigo.comSHA2 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=
Açıklama
  • Yalnızca http ile başlayan zaman damgası adresleri kullanılır.
  • SHA1 öncelikli olarak --timestamp kullanır; eğer bu bir HTTP adresi değilse --timestamp-rfc3161 kullanılmayı dener.
  • SHA2, --timestamp-rfc3161 kullanı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
Açıklama

--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şturulduZaman 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.