Not: Git 2.5'e kadar git verify-commitve git verify-tagyalnızca okunabilir bir mesaj görüntülenir.
Kontrolü otomatikleştirmek istiyorsanız, git 2.6+ (Q3 2015) başka bir çıktı ekler.
See commit e18443e , commit aeff29d , commit ca194d5 , commit 434060e , commit 8e98e5f , commit a4cc18f , commit d66aeff (21 Jun 2015) by brian m. carlson ( bk2204) .
( Junio C Hamano ile birleştirildi - gitster- in commit ba12cb2 , 03 Ağu 2015)
verify-tag/ verify-commit: ham gpg durum bilgilerini yazdırmak için seçenek ekleyin
verify-tag/ verify-commitvarsayılan olarak, standart hata durumunda insan tarafından okunabilir çıktı görüntüler.
Bununla birlikte, makine tarafından okunabilen ve imzalama politikasının otomatik olarak uygulanmasına izin veren ham gpg durum bilgisine erişim sağlamak da yararlı olabilir .
Bir ekleme --rawseçeneği yapmak verify-tagyerine insan tarafından okunabilir formatta standart hata Gpg durum bilgilerini üretirler.
Artı:
verify-tagİmza iyiyse ancak anahtar güvenilmezse başarıyla çıkar. verify-commitbaşarısız bir şekilde çıkar.
Davranıştaki bu farklılaşma beklenmedik ve istenmeyen bir durumdur.
Yana verify-tagönceleri de vardı, olması, başarısız testi eklemek verify-commitpayı verify-tag'ın davranışı.
git 2.9 (Haziran 2016) git birleştirme belgesini güncelle :
Bkz. 05a5869 (13 Mayıs 2016), Keller Fuchs (``) .
Yardımcı: Junio C Hamano ( gitster) .
( Junio C Hamano ile birleştirildi - gitster- in commit be6ec17 , 17 Mayıs 2016)
--verify-signatures:
--no-verify-signatures:
Birleştirilen yan dalın uç kaydının geçerli bir anahtarla, yani geçerli bir kullanıcı kimliğine sahip bir anahtarla
imzalandığını doğrulayın: varsayılan güven modelinde bu, imzalama anahtarının güvenilir bir anahtarla imzalandığı anlamına gelir.
Yan dalın ipucu taahhüdü geçerli bir anahtarla imzalanmazsa, birleştirme iptal edilir .
Git 2.10 Güncellemesi (2016'nın 3. Çeyreği)
Bkz. Commit b624a3e (16 Ağu 2016), Linus Torvalds ( torvalds) .
( Junio C Hamano ile birleştirildi - gitster- in commit 83d9eb0 , 19 Ağu 2016)
gpg-interface: pgp imzalarını doğrularken "uzun" anahtar biçimi çıktısını tercih edin
" git log --show-signature" ve PGP imzasının doğrulama durumunu gösteren diğer komutlar artık daha uzun anahtar kimliğini gösteriyor, çünkü 32 bit anahtar kimliği geçen yüzyılda böyle.
Linus'un orijinali, geçmişte sıkışmış ikili dağıtıcıların eski kod tabanlarına götürmek istemeleri durumunda, bakım yoluna uygulanmak üzere yeniden düzenlendi.
Git 2.11+ (Q4 2016) daha da kesinleşecek.
Bkz. 661a180 (12 Ekim 2016), Michael J Gruber ( mjg) .
(Göre Birleştirilmiş - Junio Cı Hamano gitster- içinde 56d268b tamamlama 2016 Ekim 26)
%G?Oldukça biçim tanımlayıcısında " " gösterilen GPG doğrulama durumu , süresi dolmuş bir anahtar tarafından yapılan bir imzayı, iptal edilmiş bir anahtarla yapılan bir imzayı vb. Ayırt edecek kadar zengin değildi .
Bunları ifade etmek için yeni çıktı harfleri atandı .
Gpg2'yedoc/DETAILS göre :
Her imzanın kodlarının tek için GOODSIG, BADSIG, EXPSIG, EXPKEYSIG, REVKEYSIGveya ERRSIGyayılacaktır.
git pretty-formatDokümantasyon şimdi şunlardır:
- '
%G?': göster
Gİyi (geçerli) bir imza için " ",
- "
B" kötü bir imza için,
UGeçerliliği bilinmeyen iyi bir imza için " ",
- "
X" süresi dolmuş iyi bir imza için,
- "
Y" süresi dolmuş bir anahtarla yapılan iyi bir imza için,
Riptal edilmiş bir anahtarla yapılan iyi bir imza için " ",
Eİmza kontrol edilemiyorsa (örn. eksik anahtar) " " ve imza yoksa "N"
Git 2.12 (Q1 2017) " git tag" ve " git verify-tag" GPG doğrulama durumunu " --format=<placeholders>" çıktı formatına koymayı öğrendi .
Bkz. Commit 4fea72f , commit 02c5433 , commit ff3c8c8 (17 Ocak 2017), Santiago Torres ( SantiagoTorres) .
Bkz 07d347c işlemek , 2111aa7 işlemek , 94240b9 tamamlama ile (17 Ara 2017) Lukas Puehringer ( `) .
(Göre Birleştirilmiş - Junio Cı Hamano gitster- içinde 237bdd9 tamamlama 2017 31 Ara)
Ekleme --formatiçin git tag -vyerine ses kapatmaları GPG doğrulama varsayılan çıkışını ve biçimlendirilmiş etiket nesnesi yazdırır.
Bu, arayanların, GPG doğrulamasından sonra etiket nesne başlığındaki etiket adı ile refs / etiketlerdeki etiket adını çapraz kontrol etmesine olanak tanır.
Git 2.16 (Q1 2018), merge.verifySignaturesyapılandırma değişkeni ile taahhüt imzası doğrulamasının daha da otomatik hale getirilmesine izin verecek .
Bkz. Commit 7f8ca20 , commit ca779e8 (10 Dec 2017) by Hans Jerry Illikainen (``) .
(Göre Birleştirilmiş - Junio Cı Hamano gitster- içinde 0433d53 tamamlama 2017 28 Ara)
merge: için yapılandırma seçeneği ekle verifySignatures
git merge --verify-signatures birleştirilen dalın ipucu kaydının doğru şekilde imzalandığını doğrulamak için kullanılabilir, ancak bunu her seferinde belirtmek zahmetlidir.
Bu davranışı varsayılan olarak etkinleştiren ve geçersiz kılınabilen bir yapılandırma seçeneği ekleyin --no-verify-signatures.
git mergeYapılandırma adam sayfası şimdi okur:
merge.verifySignatures:
Doğruysa, bu --verify-signatureskomut satırı seçeneğine eşdeğerdir .
Git 2.19 (Q3 2018) daha da yararlıdır çünkü " git verify-tag" ve " git verify-commit", gpg --verifybuldukları kötü veya güvenilmeyen imzayı işaret etmek için " " temelindeki çıkış durumunu kullanmaları öğretilmiştir .
Not: Git 2.19 ile gpg.format"ayarlanabilir openpgp" veya " x509" ve gpg.<format>.programbu "üzerinden CMS ile x.509 certs izin) biçiminde başa kullanmak ne programı belirtmek için kullanılır gpgsm" yerine kullanılacak openpgpüzeri " gnupg".
Junio C Hamano ( ) tarafından hazırlanan commit 4e5dc9c (09 Ağu 2018) bölümüne bakın . Yardımcı
: Vojtech Myslivec ( ) , brian m. carlson ( ) ve Jeff King ( ) . ( Junio C Hamano ile birleştirildi - - in commit 4d34122 , 20 Ağu 2018)gitster
VojtechMyslivecbk2204peff
gitster
gpg-interface: çıkış durumunu gpgarkadan arayanlara yay
2015 ortalarında v2.6.0-rc0 ~ 114 civarında imzalanan etiketler ve imzalanan taahhütler için imza doğrulama kod yolları için gpg-arabirim API birleşik desteği, yanlışlıkla GPG imza doğrulamasını gevşetmiştik.
Bu değişiklikten önce, imzalı kayıtlar GGPG'den " " ood imzası aranarak, " gpg --verify" işlemin çıkış durumu göz ardı edilerek doğrulanırken, imzalı etiketler sadece "gpg --verify"through" çıkış durumu geçirilerek doğrulanırdı .
Şu anda sahip olduğumuz birleşik kod, " gpg --verify" çıkış durumunu yoksayar ve anahtardaki güvene bakılmaksızın imza süresi dolmamış bir anahtarla eşleştiğinde başarılı bir doğrulama döndürür (yani G" U" taşkınlara ek olarak , "güvenilmeyenleri kabul ediyoruz" ).
Bu komutların " gpg --verify" (veya gpg.programkonfigürasyon değişkeni tarafından " " belirtilen özel komut) altında yatan çıkış durumu ile hata sinyali vermesini sağlayın .
Bu, esasen davranışlarını geriye dönük uyumsuz bir şekilde değiştirerek, güvenilmeyen anahtarlarla yapılmış imzaları doğru şekilde doğrulasalar bile, " gpg --verify" böyle davranır.
Kodun, " gpg" (veya gpg.program) ' den elde edilen bir sıfır çıkış durumunu geçersiz kıldığına dikkat edin, eğer çıktı, imzanın iyi olduğunu veya doğru hesaplandığını söylemiyorsa, ancak güvenilmeyen anahtarlarla yapılmışsa gpg, kullanıcı " " etrafında kötü yazılmış bir sarmalayıcıyı yakalamak için " " bize verebilir .
UGüvenilen desteği bu yedek koddan " " çıkarabiliriz, ancak bu, tek bir işlemede geriye dönük uyumsuz iki değişiklik yapmak anlamına gelir, bu yüzden şimdilik bundan kaçınalım.
Bir takip değişikliği istenirse bunu yapabilir.
herhangi bir şifreleme yapmadan önce anahtara güvenilmesi / imzalanması gerekir
Güven tarafında ilerleme var:
Git 2.26 (Q1 2020) ile, gpg.minTrustLevelçeşitli imza doğrulama kod yollarına gerekli minimum güven seviyesini söylemek için yapılandırma değişkeni tanıtıldı.
Bkz. 54887b4 (27 Aralık 2019), Hans Jerry Illikainen ( illikainen) .
(Göre Birleştirilmiş - Junio Cı Hamano gitster- içinde 11ad30b tamamlama 2020 Ocak 30)
gpg-interface: minTrustLevel'i yapılandırma seçeneği olarak ekleyin
İmza: Hans Jerry Illikainen
Önceden, birleştirme ve çekme işlemleri için imza doğrulaması, anahtarın güven düzeyinin biri TRUST_NEVERveya TRUST_UNDEFINEDiçinde olup olmadığını kontrol ediyordu verify_merge_signature().
Durum buysa, süreç die()d.
İmza doğrulaması yapan diğer kod yolları, tamamen gelen dönüş koduna dayanıyordu check_commit_signature().
Ve güven düzeyi ne olursa olsun iyi bir anahtarla yapılan imzalar tarafından geçerli kabul edildi check_commit_signature().
Davranıştaki bu farklılık, kullanıcıların yanlışlıkla, anahtarlıklardaki bir anahtarın güven düzeyinin, olmadığı işlemler için bile (örneğin a verify-commitveya sırasında verify-tag) Git tarafından dikkate alındığını varsaymalarına neden olabilir .
İşe yaradı yolu ile yapıldı gpg-interface.canahtar / imza statüsünden sonucunu depolamak ve en düşük iki güven seviyeleri resultüyesi signature_checkyapısına (yazılır var karşılaşıldı bu durum hatlarının son result).
Bu alt altında GPG belgelenmiştir General status codesve Key relatedsırasıyla.
GPG belgeleri, TRUST_ statuskodlar hakkında şunları söylüyor :
Bunlar birkaç benzer durum kodu:
- TRUST_UNDEFINED <error_token>
- TRUST_NEVER <error_token>
- TRUST_MARGINAL [0 [<validation_model>]]
- TRUST_FULLY [0 [<validation_model>]]
- TRUST_ULTIMATE [0 [<validation_model>]]
İyi imzalar için, bu durum satırlarından biri, imzayı oluşturmak için kullanılan anahtarın geçerliliğini belirtmek için gönderilir.
Hata belirteci değerleri şu anda yalnızca gpgsm tarafından yayınlanmaktadır.
Benim yorumum, güven düzeyinin kavramsal olarak anahtarın ve / veya imzanın geçerliliğinden farklı olduğu yönündedir.
Görünüşe göre bu aynı zamanda eski kod varsayımıydı ve check_signature()' G' (olduğu gibi GOODSIG) ve ' U' (olduğu gibi TRUST_NEVERveya TRUST_UNDEFINED)her ikisi de bir başarı olarak kabul edildi).
' U' Sonucunun özel bir anlamı olduğu iki durum verify_merge_signature()(bunun neden gitolduğu die()) ve içinde format_commit_one()( %G?biçim tanımlayıcısının çıktısını etkilediği yer ).
TRUST_ statusHatların işlenmesini, kullanıcıların tek tek parçalarının git(örneğin birleştirme) kendilerinin yapmasını sağlamak yerine (örneğin birleştirme) küresel olarak uygulanan minimum bir güven düzeyini yapılandırabilecekleri şekilde yeniden düzenlemenin mantıklı olduğunu düşünüyorum (geriye dönük uyumluluğa sahip bir yetkisiz kullanım süresi hariç).
Ayrıca, güven düzeyini anahtar / imza durumuyla aynı yapı üyesinde saklamamanın mantıklı olduğunu düşünüyorum.
Bir TRUST_ statuskodun varlığı imzanın iyi olduğunu ima etse de (yukarıdaki ön bilgideki ilk paragrafa bakın), anlayabildiğim kadarıyla, GPG'den gelen durum satırlarının sırası iyi tanımlanmadı; bu nedenle, güven seviyesinin, signature_checkyapının aynı üyesinde saklanmışlarsa anahtar / imza durumunun üzerine yazılabileceği makul görünmektedir .
Bu yama yeni bir yapılandırma seçeneği sunar: gpg.minTrustLevel.
Güven düzeyinde doğrulamayı birleştirir ve yapıya gpg-interface.cyeni bir trust_levelüye ekler signature_check.
Geriye dönük uyumluluk, özel bir durum getirilerek korunur, verify_merge_signature()öyle ki, eğer kullanıcı tarafından yapılandırılabilir gpg.minTrustLevelbir ayar yoksa , o zaman eski reddetme davranışı uygulanır TRUST_UNDEFINEDve TRUST_NEVERuygulanır.
Öte yandan, gpg.minTrustLevelayarlanmışsa, bu değer eski davranışı geçersiz kılar.
Benzer şekilde, güven düzeyine sahip bir anahtarla yapılan imzalar için veya yapının üyesinde ' ' karakteri artık mevcut olmasa bile %G?biçim belirticisi ' U' göstermeye devam edecektir . TRUST_UNDEFINEDTRUST_NEVER,Uresultsignature_check
%GTİmza için tüm olası güven düzeylerini göstermek isteyen kullanıcılar için yeni bir biçim belirleyici de tanıtıldı.
Başka bir yaklaşım, güven düzeyi koşulunu basitçe kaldırmak olabilirdi verify_merge_signature().
Bu aynı zamanda davranışı git'in imza doğrulaması yapan diğer bölümleriyle tutarlı hale getirirdi.
Bununla birlikte, anahtarları imzalamak için minimum bir güven düzeyi gerektirmenin gerçek dünyada bir kullanım durumu var gibi görünüyor.
Örneğin, Qubes OS projesi tarafından kullanılan derleme sistemi, git etiketlerini imzalamak için kullanılan anahtarlar için minimum bir güven düzeyi belirlemek için şu anda doğrulama etiketindeki ham çıktıyı ayrıştırıyor .
git config gpgAdam sayfa şimdi içerir:
gpg.minTrustLevel:
İmza doğrulaması için minimum güven düzeyini belirtir.
Bu seçenek ayarlanmamışsa, birleştirme işlemleri için imza doğrulaması en azından marginalgüvenilir bir anahtar gerektirir .
İmza doğrulamasını gerçekleştiren diğer işlemler, en azından undefinedgüvene sahip bir anahtar gerektirir .
Bu seçeneğin ayarlanması, tüm işlemler için gerekli güven düzeyini geçersiz kılar. Artan önem sırasına göre desteklenen değerler:
undefined
never
marginal
fully
ultimate
İle Git 2.26 (Q1 2020 yılında) , " git show" ve diğerleri hex vermek giderilmiştir kendi hata çıkışı, ham biçiminde bir nesne adını verdi.
show_one_mergetag: ebeveyn olmayanları onaltılık biçimde yazdırır.
Bir birleştirme etiketi, sığ bir klondan sonra ortaya çıkabilecek bir üst öğe olmayanı adlandırdığında, hash'i önceden ham veri olarak yazdırılıyordu.
Bunun yerine onaltılık biçimde yazdırın.
Sınana git -C shallow log --graph --show-signature -n1 plain-shallowbir sonrakigit clone --depth 1 --no-local . shallow
Git 2.27 (Q2 2020) ile, GnuPG ile arabirim kodu yeniden düzenlendi.
Bkz. Commit 6794898 , commit f1e3df3 (04 Mart 2020), Hans Jerry Illikainen ( illikainen) .
(Göre Birleştirilmiş - Junio Cı Hamano gitster- içinde fa82be9 tamamlama 2020 27 Mar)
gpg-interface: check_signature()GPG doğrulamasını tercih edin
İmza: Hans Jerry Illikainen
Bu refactors kullanımını taahhüt verify_signed_buffer()dışına gpg-interface.ckullanmak check_signature()yerine.
Ayrıca, verify_signed_buffer()artık yalnızca .tarafından dahili olarak çağrıldığı için yerel dosya işlevine dönüşür check_signature().
Daha önce Git'in farklı bölümlerinde GPG imza doğrulamasını gerçekleştirmek için kullanılan küresel kapsamlı iki işlev vardı: verify_signed_buffer()ve check_signature().
Şimdi sadece check_signature()kullanılıyor.
verify_signed_buffer()Fonksiyon karşı korumak değil Michal Górny tarafından açıklandığı gibi yinelenen imzalar .
Bunun yerine, yalnızca GPG'den hatalı olmayan bir çıkış kodu ve en az bir GOODSIGdurum alanının varlığını sağlar .
Bu, check_signature()birden fazla imzayla karşılaşıldığında bir hata döndürmesinin aksine durur .
Daha düşük doğrulama derecesi, verify_signed_buffer()arayanlar GPG durum mesajının çeşitli bölümlerini kendileri ayrıştırıp doğrulamazsa kullanımı sorunlu hale getirir .
Ve bu mesajların işlenmesi gpg-interface.c, işleve ayrılması gereken bir görev gibi görünüyor check_signature().
Ayrıca, kullanımı verify_signed_buffer()GPG durum satırlarının içeriğine dayanan yeni işlevsellik sunmayı zorlaştırır.
Artık imza doğrulaması yapan tüm işlemler tek bir giriş noktasını paylaşıyor gpg-interface.c.
Bu, GPG imza doğrulamasındaki değiştirilmiş veya ek işlevselliği, aynı derecede doğrulamayı gerçekleştirmeyen tuhaf uç durumlar olmadan Git'in tüm bölümlerine yaymayı kolaylaştırır .
git commit ...ve olmalıgit log .... Bildiğim kadarıyla, şeffaf olarakgpgaktarılan alt komutlar eklemedigit... Test edilecek depom yok amagit show --show-signature <commitish>işe yarıyor mu?