InputStream blobStream =
((OracleResultSet)rs).getBLOB(1).binaryStreamValue();
auslese, dann führt der Aufruf von
final CertificateFactory factory =
CertificateFactory.getInstance("X.509");
X509Certificate cert =
(java.security.cert.X509Certificate)factory.generateCertificate(blobStream);
zu folgendem Fehler
java.security.cert.CertificateException: Unable to initialize,
java.io.IOException: insufficient data
at sun.security.x509.X509CertImpl.<init>(X509CertImpl.java:300)
at
sun.security.provider.X509Factory.engineGenerateCertificate(X509Factory.java:104)
at
java.security.cert.CertificateFactory.generateCertificate(CertificateFactory.java:389)
at de.osci.helper.Tools.createCertificate(Tools.java:81)
at de.thueringen.tlrz.Clearingstelle.VDIntern.getCert(VDIntern.java:328)
at de.thueringen.tlrz.Clearingstelle.Test.CertTest.main(CertTest.java:54)
Caused by: java.io.IOException: insufficient data
at sun.security.util.DerInputBuffer.truncate(DerInputBuffer.java:108)
at sun.security.util.DerValue.<init>(DerValue.java:261)
at sun.security.util.DerInputStream.getDerValue(DerInputStream.java:386)
at sun.security.x509.X509CertImpl.parse(X509CertImpl.java:1657)
at sun.security.x509.X509CertImpl.<init>(X509CertImpl.java:297)
Wenn ich allerdings die Zertifikatsdatei über das Dateisystem mittels
eines FileInputStream einlese, dann läuft das Programm fehlerfrei. Wo
liegt der Fehler?
Lars
Es gab da mal nen Bug im Oracle-JDBC-Treiber, der die maximal Grösse der
Blobs auf 4 oder 8 kbyte beschränkte. Eventuell liegt es ja daran,
ansonsten würde ein kleiner Test Klarheit schaffen: Cert aus File in DB,
unter neuer Transaktion Cert aus DB in ein neues File schreiben, die
zwei Files Byteweise vergleichen.
bernd