從Java Keystore檔案中提取私密金鑰、認證

來源:互聯網
上載者:User

Keystore是一個密碼保護的檔案,存放私密金鑰和認證。可以通過JDK內建的keytool工具產生。

但是keytool工具,並沒有提供方便的方法,從keystore檔案中到處私密金鑰和認證。

所以可以通過JDK提供的java.security.KeyStore
類來編碼完成相關工作。

參見:

http://www.anandsekar.com/2006/01/19/exporting-the-private-key-from-a-jks-keystore/

 

<br /> import java.io.File;<br /> import java.io.FileInputStream;<br /> import java.io.FileWriter;<br /> import java.security.Key;<br /> import java.security.KeyPair;<br /> import java.security.KeyStore;<br /> import java.security.KeyStoreException;<br /> import java.security.NoSuchAlgorithmException;<br /> import java.security.PrivateKey;<br /> import java.security.PublicKey;<br /> import java.security.UnrecoverableKeyException;<br /> import java.security.cert.Certificate;</p><p> import sun.misc.BASE64Encoder; </p><p> public class ExportPrivateKey {<br /> private File keystoreFile;<br /> private String keyStoreType;<br /> private char[] password;<br /> private String alias;<br /> private File exportedFile; </p><p> public static KeyPair getPrivateKey(KeyStore keystore, String alias, char[] password) {<br /> try {<br /> Key key=keystore.getKey(alias,password);<br /> if(key instanceof PrivateKey) {<br /> Certificate cert=keystore.getCertificate(alias);<br /> PublicKey publicKey=cert.getPublicKey();<br /> return new KeyPair(publicKey,(PrivateKey)key);<br /> }<br /> } catch (UnrecoverableKeyException e) {<br /> } catch (NoSuchAlgorithmException e) {<br /> } catch (KeyStoreException e) {<br /> }<br /> return null;<br /> }</p><p> public void export() throws Exception{<br /> KeyStore keystore=KeyStore.getInstance(keyStoreType);<br /> BASE64Encoder encoder=new BASE64Encoder();<br /> keystore.load(new FileInputStream(keystoreFile),password);<br /> KeyPair keyPair=getPrivateKey(keystore,alias,password);<br /> PrivateKey privateKey=keyPair.getPrivate();<br /> String encoded=encoder.encode(privateKey.getEncoded());<br /> FileWriter fw=new FileWriter(exportedFile);<br /> fw.write(“—–BEGIN PRIVATE KEY—–/n“);<br /> fw.write(encoded);<br /> fw.write(“/n“);<br /> fw.write(“—–END PRIVATE KEY—–”);<br /> fw.close();</p><p> }</p><p> public static void main(String args[]) throws Exception{<br /> ExportPrivateKey export=new ExportPrivateKey();<br /> export.keystoreFile=new File(args[0]);<br /> export.keyStoreType=args[1];<br /> export.password=args[2].toCharArray();<br /> export.alias=args[3];<br /> export.exportedFile=new File(args[4]);<br /> export.export();<br /> }<br /> }<br />

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.