SQL Server
SQL Server
Get RSA Key Modulus from .cer or .key
See more Certificates Examples
Demonstrates how to get the RSA key modulus from either the certificate (.cer) or RSA key (.key). OpenSSL commands to do the same would be:openssl x509 -inform DER -in "test.cer" -modulus -nooutor
openssl pkcs8 -inform DER -inβ "test.key"β -outform PEM -passin pass:"12345β678aβ" | openssl rsa -inform PEM -modulus -noout
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 @success int
SELECT @success = 0
DECLARE @privKey int
EXEC @hr = sp_OACreate 'Chilkat.PrivateKey', @privKey OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
DECLARE @password nvarchar(4000)
SELECT @password = '12345678a'
EXEC sp_OAMethod @privKey, 'LoadPkcs8EncryptedFile', @success OUT, 'qa_data/certs/test_12345678a.key', @password
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @privKey, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @privKey
RETURN
END
DECLARE @xml int
EXEC @hr = sp_OACreate 'Chilkat.Xml', @xml OUT
EXEC sp_OAMethod @privKey, 'GetXml', @sTmp0 OUT
EXEC sp_OAMethod @xml, 'LoadXml', @success OUT, @sTmp0
-- The XML contains the parts of the key in base64.
PRINT 'Private Key XML:'
EXEC sp_OAMethod @xml, 'GetXml', @sTmp0 OUT
PRINT @sTmp0
-- We can get the base64 modulus like this:
DECLARE @modulus nvarchar(4000)
EXEC sp_OAMethod @xml, 'GetChildContent', @modulus OUT, 'Modulus'
PRINT 'base64 modulus = ' + @modulus
-- To convert to hex:
DECLARE @binDat int
EXEC @hr = sp_OACreate 'Chilkat.BinData', @binDat OUT
EXEC sp_OAMethod @binDat, 'AppendEncoded', @success OUT, @modulus, 'base64'
DECLARE @hexModulus nvarchar(4000)
EXEC sp_OAMethod @binDat, 'GetEncoded', @hexModulus OUT, 'hex'
PRINT 'hex modulus = ' + @hexModulus
-- Now get the modulus from the cert:
DECLARE @cert int
EXEC @hr = sp_OACreate 'Chilkat.Cert', @cert OUT
EXEC sp_OAMethod @cert, 'LoadFromFile', @success OUT, 'qa_data/certs/test_12345678a.cer'
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @cert, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @privKey
EXEC @hr = sp_OADestroy @xml
EXEC @hr = sp_OADestroy @binDat
EXEC @hr = sp_OADestroy @cert
RETURN
END
-- The cert contains the public key, which is composed of the
-- modulus + exponent (for RSA keys).
DECLARE @pubKey int
EXEC @hr = sp_OACreate 'Chilkat.PublicKey', @pubKey OUT
EXEC sp_OAMethod @cert, 'GetPublicKey', @success OUT, @pubKey
EXEC sp_OAMethod @pubKey, 'GetXml', @sTmp0 OUT
EXEC sp_OAMethod @xml, 'LoadXml', @success OUT, @sTmp0
PRINT 'Public Key XML:'
EXEC sp_OAMethod @xml, 'GetXml', @sTmp0 OUT
PRINT @sTmp0
-- Proceed in the same way as before....
EXEC sp_OAMethod @xml, 'GetChildContent', @modulus OUT, 'Modulus'
PRINT 'base64 modulus = ' + @modulus
-- To convert to hex:
EXEC sp_OAMethod @binDat, 'Clear', @success OUT
EXEC sp_OAMethod @binDat, 'AppendEncoded', @success OUT, @modulus, 'base64'
EXEC sp_OAMethod @binDat, 'GetEncoded', @hexModulus OUT, 'hex'
PRINT 'hex modulus = ' + @hexModulus
EXEC @hr = sp_OADestroy @privKey
EXEC @hr = sp_OADestroy @xml
EXEC @hr = sp_OADestroy @binDat
EXEC @hr = sp_OADestroy @cert
EXEC @hr = sp_OADestroy @pubKey
END
GO