Çapraz imzalı CA: anahtar eşleşiyor, AKI bağı eşleşmiyor
Bir yaprak, anahtar tanımlayıcısı ile birlikte veren ve seri numarası üzerinden verenini sabitleyebilir. Çapraz imzalı bir zinciri değiştirilebilir saymadan önce bu bağı denetleyin.
İki CA sertifikası aynı açık anahtarı ve aynı subject'i taşıyabilir ve yine de birbirinin yerine geçmez. Biri kendinden imzalıdır, diğeri eski kök tarafından çapraz imzalanmıştır ve veren adları, seri numaraları ile imzaları farklıdır. Bir yaprak, Authority Key Identifier'ı aracılığıyla bunlardan yalnızca birine bağlanabilir. Bu bağ, bir istemci yanlış zinciri seçip handshake belirgin bir neden olmadan başarısız olana kadar görünmez kalır.
Bu beş denetimi sırayla yapın: her biri farklı bir arızayı eler.
Denetim 1: şablona dokunmadan önce iki zinciri de çizin
Yolları yazın. Eski topluluk Eski Kök A'ya güvenir, o CA B'yi verdi, o da sunucunun yaprağını verdi. Yeni topluluk kendinden imzalı CA B'ye doğrudan güvenir. İki B sertifikası da aynı anahtarı ve subject'i taşır, bu yüzden subject satırını okuyan kişi istemcinin iki gördüğü yerde bir CA görür.
Çapraz imzalı kopya da gerçek bir CA sertifikası olmalıdır; basic constraints ve key usage imzalamaya izin vermelidir.
Denetim 2: yalnızca anahtarı değil, AKI alanlarını karşılaştırın
Yaprağın veren adı B'nin subject'iyle eşleşmelidir ve bu kısım genellikle tutar. İki kopyanın ayrıldığı yer Authority Key Identifier'dır, çünkü anahtar tanımlayıcısı, veren sertifikası ve seri numarası taşıyabilir. Anahtar tanımlayıcısı iki kopyayla da eşleşir, çünkü anahtar aynıdır. Veren ve seri alanları tam olarak biriyle eşleşir, bu yüzden kendinden imzalı kopyaya karşı kurulan zincir çapraz imzalıya karşı başarısız olabilir.
Tahmin etmek yerine yaprağı inceleyin: openssl x509 -in server.pem -noout -ext authorityKeyIdentifier.
Ardından iki adayı openssl x509 -in b-cross.pem -noout -text | grep -A2 "Authority Key Identifier" ile karşılaştırın ve aynı komutu kendinden imzalı kopyaya karşı çalıştırın.
Yaprak veren ve seri numarası taşıyorsa zinciri yalnızca o değerlerin tanımladığı sertifika tamamlar, istemci hangi kopyayı yüklemiş olursa olsun.
Denetim 3: verme politikasını değiştirin, asla imzalı baytları değil
Uzantılar imzanın içinde yaşar. Var olan bir yaprakta birini eklemek, silmek veya düzenlemek onarım değildir, başka bir sertifikadır ve yeniden verme gerektirir. Değişiklik verme politikasına aittir: authorityKeyIdentifier = keyid,issuer:always yeni yaprakların sertifikaya özgü bağı taşımasını sağlar, tek başına keyid ise bilinçli bir çapraz imzalama geçişine uygun daha gevşek biçimi korur. Bir sonraki parti imzalanmadan önce PKI'nızın hangisini istediğine karar verin.
Paylaşılan bir şablonu düzenlemek yalnızca önünüzdeki sunucuyu değil, gelecekteki her sertifikayı da değiştirir.
Denetim 4: her güven topluluğunu ayrı ayrı doğrulayın
Eski yolu ve yeni yolu ayrı çalıştırmalar olarak test edin. openssl verify -purpose sslserver -verify_hostname vpn.example -CAfile old-root.pem -untrusted b-cross-signed.pem server.pem çapraz imzalı rotayı çalıştırır; yeni kökle ve untrusted dosyası olmadan aynı komut kendinden imzalı rotayı çalıştırır. İki kökü tek bir pakette karıştırmak hangi zincirin seçildiğini gizler. Ardından gerçek istemcilerle yineleyin, çünkü bir VPN arka ucu bir zinciri tercih edebilir veya bir sertifikayı sabitleyebilir openssl'in yapmadığı biçimlerde.
Ara sertifikayı istemcinin gerçekten okuduğu hizmet yapılandırması üzerinden teslim edin, bir wiki sayfası üzerinden değil.
Denetim 5: eski yolu bir kullanımdan kaldırma saati üzerinde tutun
Çapraz imzalama eski bir güven yolunu tasarım gereği canlı tutar; bu hem amaç hem de risktir. Ele geçirilmiş eski bir kökü iyileştirmez ve o kökü hiçbir istemciden kaldırmaz. Eski yolun güven vermeyi ne zaman bırakacağını yazın ve o günün gerçekten geldiğini doğrulayın.
Her istemci yapraklar taşınmadan önce yeni kökü kabul edebiliyorsa, basit bir çift güven dağıtımı çapraz imzalamadan daha kolaydır ve kullanımdan kaldırılacak bir şey daha az bırakır.