Tomcat açılışında java.io.IOException: DerInputStream.getLength(): lengthTag=..., too big ya da Invalid keystore format görmek, bağlayıcının (connector) gösterilen dosyayı beklediği anahtar deposu biçiminde okuyamadığı anlamına gelir.
Nedenler
- PEM metin dosyası (.crt/.pem/.key) doğrudan
keystoreFileolarak verilmiş. keystoreTypegerçek biçimle uyuşmuyor (JKS yerine PKCS12 olan bir dosya vb.).- Keystore parolası yanlış ya da dosya bozulmuş.
- Zincir sırası veya eksik parçalarla oluşturulmuş PKCS#12.
Çözüm: PEM'den PKCS#12 üretme
- Sertifika, zincir ve anahtardan .p12 oluşturun:
openssl pkcs12 -export -inkey alanadi.key -in alanadi-fullchain.crt \ -name tomcat -out alanadi.p12 - İçeriği doğrulayın:
keytool -list -v -keystore alanadi.p12 -storetype PKCS12 server.xmliçindeki bağlayıcıyı güncelleyin:<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true"> <SSLHostConfig> <Certificate certificateKeystoreFile="conf/alanadi.p12" certificateKeystorePassword="parola" certificateKeystoreType="PKCS12" /> </SSLHostConfig> </Connector>- Tomcat 8.5 ve sonrasında PEM dosyaları da doğrudan kullanılabilir:
certificateFile,certificateKeyFile,certificateChainFileöznitelikleri. catalina.outvelocalhost.logdosyalarını izleyerek servisi yeniden başlatın.
Dikkat
Parola yanlışsa hata genellikle "keystore password was incorrect" biçiminde görünür; DerInputStream hatası daha çok biçim uyuşmazlığına işaret eder. Sertifikayı almadan önce anahtar ve CSR'ınızı CSR oluşturucu ile hazırlayabilirsiniz. Kurulum sonrası doğrulama için SSL denetleme aracı kullanışlıdır.
Ek ipuçları
Eski Java sürümlerinde PKCS12 içindeki bazı güçlü şifreleme algoritmaları desteklenmeyebilir; bu durumda keytool -list komutu da hata verir. Java sürümünüzü güncellemek ya da .p12'yi uyumlu algoritmalarla yeniden oluşturmak gerekir. Keystore dosyalarını sürüm kontrolüne koymayın ve parolaları yapılandırma dışında tutmaya özen gösterin.