oracle - 在Oracle存储过程中解析base64 X509证书?

标签 oracle plsql base64 x509

我有一个 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/

相关文章:

java - 在 J2ME 中将 RSAPrivateCrtKeyParameters/RSAKeyParameters 转换为 PEM

java - 使用 sun.misc.BASE64Decoder/sun.misc.BASE64Encoder 是个好主意吗?

database - Oracle中通过脚本创建新表时将列名更改为大写如何解决?

sql - JOIN 语法中缺少关键字

java - 在 Groovy 中获取正确版本的 Oracle 驱动程序

sql - 甲骨文 ORA-00600

delphi - 如何在Delphi 6中进行base64编码?

sql - 在 Oracle 中,如何在不创建存储过程的情况下将多行连接成一行?

甲骨文APEX |如何更改选择列表值并动态提交

oracle - 如何理解给定的 sysdate 是日期或时间戳