Sample how to decode X509 in PL/SQL.
-- JAVA PROCEDURE FOR DECODE X509 CERTIFICATE. SAMPLE FOR ISSUERDN
-- MORE on X509Certificate https://docs.oracle.com/javase/8/docs/api/java/security/cert/X509Certificate.html
create or replace and compile java source named testx509src as
import java.security.cert.*;
import java.io.*;
import java.sql.*;
import java.security.Principal;
import oracle.sql.CHAR;
public class TestX509 {
public static oracle.sql.CHAR getIssuer(CHAR cert)
throws SQLException, IOException, CertificateException {
String aa = new String(cert.getString());
CertificateFactory cf = CertificateFactory.getInstance("X.509");
ByteArrayInputStream bytes = new ByteArrayInputStream(aa.getBytes());
X509Certificate c = (X509Certificate) cf.generateCertificate(bytes);
Principal principal = c.getIssuerDN();
String issuerDn = principal.getName();
oracle.sql.CHAR AAA = new oracle.sql.CHAR(issuerDn, null );
return AAA;
}
}
/
--PL/SQL INTERFACE FOR JAVA CALL
CREATE OR REPLACE FUNCTION CERT_getIssuer(cert in varchar2)
RETURN VARCHAR2
AS LANGUAGE JAVA
NAME 'TestX509.getIssuer(oracle.sql.CHAR) return oracle.sql.CHAR';
/
--TEST SCRIPT
declare
x509certificate varchar2(4000);
begin
x509certificate := '-----BEGIN CERTIFICATE-----
MIIBfzCCASmgAwIBAgIQWFSKzCWO2ptOAc2F3MKZSzANBgkqhkiG9w0BAQQFADAa
MRgwFgYDVQQDEw9Sb290Q2VydGlmaWNhdGUwHhcNMDExMDE5MTMwNzQxWhcNMzkx
MjMxMjM1OTU5WjAaMRgwFgYDVQQDEw9Vc2VyQ2VydGlmaWNhdGUwXDANBgkqhkiG
9w0BAQEFAANLADBIAkEA24gypa2YFGZHKznEWWbqIWNVXCM35W7RwJwhGpNsuBCj
NT6KEo66F+OOMgZmb0KrEZHBJASJ3n4Cqbt4aHm/2wIDAQABo0swSTBHBgNVHQEE
QDA+gBBch+eYzOPgVRbMq5vGpVWooRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mC
EMlg/HS1KKqSRcg8a30Za7EwDQYJKoZIhvcNAQEEBQADQQCYBIHBqQQJePi5Hzfo
CxeUaYlXmvbxVNkxM65Pplsj3h4ntfZaynmlhahH3YsnnA8wk6xPt04LjSId12RB
PeuO
-----END CERTIFICATE-----';
dbms_output.put_line( cert_getissuer(x509certificate) );
end;
/