Ana içeriğe geç

signtool sign komut referansı

Açıklama

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 ÖğesiParametreOrtam DeğişkeniAçıklama
Access Key--access-key / -kACCESS_KEYParametre boşsa ortam değişkeni otomatik olarak okunur
Access Secret--access-secret / -sACCESS_SECRETParametre 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ğeriGerçek hizmet adresi
nicsrshttps://ssl.face.nicsrs.com
Boş değer, racent veya diğer herhangi bir değerhttps://ssl.face.racent.com
Dikkat
  • ACCESS_KEY ve ACCESS_SECRET gerçekte okunan ortam değişkeni adlarıdır; SIGNTOOL_ACCESS_KEY / SIGNTOOL_ACCESS_SECRET mevcut 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ı

ParametreKısa YazımVarsayılan DeğerAçıklama
--address-aBoşUzak hizmet adresi tanımlayıcısı; URL geçiş 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 dosyanın yolu; dizin olamaz.
--out-oboşÇıktı dosyası yolu; boşsa ve üzerine yazma etkin değilse varsayılan dosya adı otomatik oluşturulur.
--overridefalseÇıktı dosyası orijinal dosyanın üzerine yazar.
--sha1-1falseSHA1 imzasını etkinleştirin.
--sha2-2trueSHA2 imzasını etkinleştirin.
--timestampautoSHA1 Authenticode zaman damgası adresi. auto varsayılan adresi kullanır, boş dize devre dışı bırakır.
--timestamp-rfc3161autoSHA2 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şİmza için yazılan program bilgisi URL'si.
--nesttrueMevcut imzayı koruyup iç içe imza ekler; false olduğunda mevcut imzayı temizler.
--verifyfalseİmza eklenirken sertifika güvenilir değilse hata döndürür.
--dry-runfalseYerel test sertifikası kullanarak imza üretir, uzak imza arayüzü çağrılmaz.
Boole değer parametre formatı

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-key veya ACCESS_KEY bulunmalıdır.
  • --access-secret veya ACCESS_SECRET mevcut olmalıdır.
  • --cert-code mevcut olmalıdır.
  • --file mevcut olmalıdır ve bir dizin olmamalıdır.
  • --sha1 ve --sha2 seç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
trueGirdi 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 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
Not

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:

Parametreauto gerçek değerAmaç
--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ı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=
Açıklama
  • Yalnızca http ile başlayan zaman damgası adresleri kullanılır.
  • SHA1 öncelikle --timestamp kullanır; bu bir HTTP adresi değilse --timestamp-rfc3161 denenir.
  • SHA2, --timestamp-rfc3161 kullanı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
Açıklama

--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ş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ğiştirin.