SQL Server
SQL Server
Load Java KeyStore and Access Contents
See more Java KeyStore (JKS) Examples
Loads a Java keystore file and iterates over the contents. A Java keystore (.jks) file can contain one or more trusted root certificate entries and/or one or more private key entries. Each private key entry includes an associated certificate chain.Chilkat SQL Server Downloads
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
DECLARE @hr int
-- Important: Do not use nvarchar(max). See the warning about using nvarchar(max).
DECLARE @sTmp0 nvarchar(4000)
DECLARE @sTmp1 nvarchar(4000)
DECLARE @success int
SELECT @success = 0
-- This requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
DECLARE @jks int
EXEC @hr = sp_OACreate 'Chilkat.JavaKeyStore', @jks OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
-- Load the Java keystore from a file. The JKS file password is used
-- to verify the keyed digest that is found at the very end of the keystore.
-- It verifies there has been no tampering with the file.
EXEC sp_OAMethod @jks, 'LoadFile', @success OUT, 'jksFilePassword', '/someDir/keyStore.jks'
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @jks, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @jks
RETURN
END
-- Find out how many of each type of entry:
DECLARE @numTrustedCerts int
EXEC sp_OAGetProperty @jks, 'NumTrustedCerts', @numTrustedCerts OUT
DECLARE @numPrivateKeys int
EXEC sp_OAGetProperty @jks, 'NumPrivateKeys', @numPrivateKeys OUT
DECLARE @cert int
EXEC @hr = sp_OACreate 'Chilkat.Cert', @cert OUT
DECLARE @alias nvarchar(4000)
-- For each trusted certificate, access it by getting
-- it as a cert object. Also get the alias associated with the certificate.
PRINT 'Trusted Certs:'
DECLARE @i int
SELECT @i = 0
WHILE @i < @numTrustedCerts
BEGIN
EXEC sp_OAMethod @jks, 'TrustedCertAt', @success OUT, @i, @cert
EXEC sp_OAMethod @jks, 'GetTrustedCertAlias', @sTmp0 OUT, @i
EXEC sp_OAGetProperty @cert, 'SubjectDN', @sTmp1 OUT
PRINT @sTmp0 + ': ' + @sTmp1
SELECT @i = @i + 1
END
DECLARE @privKey int
EXEC @hr = sp_OACreate 'Chilkat.PrivateKey', @privKey OUT
DECLARE @certChain int
EXEC @hr = sp_OACreate 'Chilkat.CertChain', @certChain OUT
-- For each private key entry, get the private key and
-- the associated certificate chain.
-- Each private key is password protected. Usually it is the same
-- password as used for the keyed digest of the entire JKS.
-- However, this does not have to be. The password is passed
-- here to handle the possibility of each private key requiring
-- a different password.
PRINT 'Private Keys:'
SELECT @i = 0
WHILE @i < @numPrivateKeys
BEGIN
EXEC sp_OAMethod @jks, 'PrivateKeyAt', @success OUT, 'jksFilePassword', @i, @privKey
EXEC sp_OAMethod @jks, 'GetPrivateKeyAlias', @sTmp0 OUT, @i
PRINT @sTmp0
EXEC sp_OAMethod @jks, 'CertChainAt', @success OUT, @i, @certChain
-- The 1st certificate in the chain is the one associated with the private key.
EXEC sp_OAMethod @certChain, 'CertAt', @success OUT, 0, @cert
EXEC sp_OAGetProperty @cert, 'SubjectDN', @sTmp0 OUT
PRINT @sTmp0
SELECT @i = @i + 1
END
EXEC @hr = sp_OADestroy @jks
EXEC @hr = sp_OADestroy @cert
EXEC @hr = sp_OADestroy @privKey
EXEC @hr = sp_OADestroy @certChain
END
GO