我有一个 Base 64 二进制格式的证书 x509。如何通过 Oracle 检索有关证书的信息?我必须获得该证书的序列号。有什么想法吗?
最佳答案
Oracle论坛上有解决办法:SQL to extract specific attributes from an x509 digital certificate
代码(原来是存储为 CLOB 的证书,我将其修改为 BLOB 并返回序列号):
create or replace and compile java source named testx509src
as
import java.security.cert.*;
import java.io.*;
import java.sql.*;
import oracle.sql.BLOB;
import oracle.sql.NUMBER;
public class TestX509 {
public static NUMBER getSerialNumber(BLOB cert)
throws SQLException, IOException, CertificateException {
Connection conn = (Connection) DriverManager.getConnection("jdbc:default:connection:");
BufferedInputStream is = new BufferedInputStream(cert.getBinaryStream());
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate c = (X509Certificate) cf.generateCertificate(is);
is.close();
return new oracle.sql.NUMBER(c.getSerialNumber());
}
}
/
CREATE OR REPLACE FUNCTION CERT_getSerialNumber(cert in blob)
RETURN NUMBER
AS LANGUAGE JAVA
NAME 'TestX509.getSerialNumber(oracle.sql.BLOB) return oracle.sql.NUMBER';
/
SQL> select CERT_GetSerialNumber(cert) serial from cert_storage where id = 1;
serial
-----------------------
243435653237
关于oracle - 在Oracle存储过程中解析base64 X509证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13107117/