Anahtar oluşturma geçici bir dosyaya ihtiyaç duymaz ve onu atlamak çoğu kılavuzun ima ettiğinden daha az şeyi düzeltir. Ortadan kaldırdığı şey bir dosya yaşam döngüsü ve çevresindeki temizlik yarışıdır. Dokunmadan bıraktığı şey ise sırrın sonradan sızması için her fırsattır. Bu betiklerdeki doğruluk sorunu genellikle başka bir yerde oturur, çünkü tanılama ve anahtar malzemesi farklı akışlarda yol alır.

Dosya hiçbir zaman sandığınız o açıklık değildi

Geçici dosya, herkes tarafından okunabildiğinde, bir çökmeden sağ çıktığında veya bir istisnadan sonra temizlik adımı atlandığında somut bir risktir. Bunlar gerçektir ve düzeltilmeye değer. Ayrıca yereldir, görünürdür ve test edilmesi kolaydır. Değişikliğin yalnızca kozmetik olduğu sonucuna varmadan önce her birini kendi betiğinizde adlandırın.

Daha sessiz riskler aşağı akışta oturur: hata ayıklama sırasında yazdırılan anahtar, tüm sonuç nesnesini serileştiren istisna, çekirdek dökümü yazan çökme işleyicisi, önce dosya yolunu sonra içeriği alan günlük toplayıcısı. Geçici bir dosyadan kaçınmak bunların hiçbiri için bir şey yapmaz ve tersine inanmak iyi niyetli bir yeniden yazımın sırrı eskisinden daha açık bırakmasının yoludur. Değişikliği bir dizideki tek bir iyileştirme olarak görün, çözüm olarak değil.

Dosya adı verilmediğinde istemci ne yazar

İstemcinin güncel sürümleri, çıktı yolu verilmeden anahtar komutu verildiğinde oluşturulan anahtarı standart çıktıya gönderir. Tam olarak bu belgelenmiş davranış, bellek içi yaklaşımı uygulanabilir kılar ve aracı bir aygıt yoluna yöneltme gibi daha eski hileye olan ihtiyacı ortadan kaldırır.

import subprocess
proc = subprocess.run(
    ["openvpn", "--genkey", "tls-crypt"],
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    check=True,
)
key_material = proc.stdout

Komutu bir liste olarak geçirin. Burada kabuk genişletmesine gerek yoktur ve bir kabuğu etkinleştirmek argüman sınırını kontrol etmediğiniz tırnaklara bağımlı hale getirirdi. Betik beklediğinizden farklı bir arama yolu ile çalışabiliyorsa amaçlanan çalıştırılabilir dosyayı mutlak yolla kullanın.

Dönüş kodu denetimi, başarı yolunun başarısız bir çağrıdan sonra devam etmesini engeller. O olmadan boş bir bayt dizisi ileri akabilir ve ancak çok sonra, anahtarın kullanıldığı ve hata iletisinin artık oluşturmadan hiç söz etmediği noktada başarısız olabilir.

İki akış, iki anlam

Standart çıktı anahtarı taşır. Standart hata aracın size söylemek istediği her şeyi taşır; yapılandırma, sürüm ve anahtar türü hakkındaki uyarılar da dahil. İkisini tek bir tampona yönlendirmek, ortasına bir cümle dikilmiş inandırıcı görünen bir anahtar üreten hatadır.

Başarısızlık yolunu da ayrı tutun. Çağrı başarısız olduğunda, başarısız olan komutu ve çıkış durumunu bildirin, sonra standart hatanın herhangi bir bölümünün gösterilmesinin güvenli olup olmadığına bilinçli olarak karar verin. Tüm sonuç nesnesini bir günlüğe boşaltmak olağan kısa yoldur ve anahtarı yanında götürebilir.

İkili veriler için güvenli okuma, malzemeyi sonradan karma veya karşılaştırma yapacaksanız önemlidir. Beklenmeyen bir kodlamayla metin kipi, hiçbir zaman metin olması düşünülmemiş baytları değiştirebilir ve değişmiş bir anahtar, el sıkışma başarısız olana kadar yanlış olandan ayırt edilemez.

Yine de saklayacaksanız, bunu bilinçli yapın

Çoğu dağıtım eninde sonunda anahtarı diskte, ağ geçidinde veya bir sır deposunda ister. Bir kez yazın, sonradan chmod yerine oluşturmadan itibaren kısıtlayıcı izinlerle ve yazmayı atomik yapın ki kısmi bir dosya asla bir hizmetin başlangıçta okuduğu dosya olmasın. Aynı dizindeki bir yoldan yeniden adlandırma bunun için genellikle yeterlidir. Hata dalında hazırlık yolunu kaldırın, çünkü başarısız yazma tam olarak insanların unuttuğu kopyadır.

Dosya oluşturulduğunda kipini ayarlayın ve dizin kipini de kısıtlayıcı tutun. Bir yedekleme işinin düşünmeden süpürdüğü bir konumun altındaki her yoldan kaçının, çünkü gecelik bir yedekteki sır o yedeğin her kopyasında sırdır. Aynı akıl yürütme diğer hizmetlerin okuyabildiği paylaşılan bir birim için de geçerlidir.

Paylaşılan anahtar bir kimlik değildir

Bu malzemeyi oluşturmak bir sertifika vermez, bir istemci kaydetmez ve kimin bağlandığını belirlemez. Paylaşılan anahtar birbirine zaten güvenen taraflar arasındaki kanalı korur; kimlik hâlâ sertifikadan ve onun önünde duran herhangi bir kimlik doğrulamadan gelir.

Anahtar türleri de birbirinin yerine geçmez. Bir özellik için simetrik anahtar diğeri için hazır bir yedek değildir ve daha yeni sürümler her iki uçta farklı dosyalarla kendi varyantlarını ekler. Yapılandırmanızın gerçekten adlandırdığı türü oluşturun, sonra onu o türün tanımladığı rolde kullanın.

Sonucu dosya boyutunu incelemek yerine gerçek bir bağlantıyla test edin. El sıkışma tamamlanır ve günlükler anahtar uyarısı göstermezse oluşturma yolu doğrudur; anahtar birleştirilmiş bir akış yüzünden kesilmiş olsaydı, bağlantı betiğe değil karşı tarafa işaret eden bir biçimde başarısız olurdu.

İlgili makaleler