mozilla

Compare Revisions

Command Line Options

Change Revisions

Revision 457497:

Revision 457497 by Ehsan on

Revision 486557:

Revision 486557 by savio on

Title:
Command Line Options
Command Line Options
Slug:
Mozilla/Command_Line_Options
Mozilla/Command_Line_Options
Tags:
"Extensions", "Developing Mozilla", "Add-ons", "NeedsUpdate", "XULRunner", "NeedsHelp", "Administration", "User_Documentation", "QA", "Command Line"
"Extensions", "Developing Mozilla", "Add-ons", "NeedsUpdate", "XULRunner", "NeedsHelp", "Administration", "User_Documentation", "QA", "Command Line"
Content:

Revision 457497
Revision 486557
tt630      <br>
631      <br>
632      import java.security.*;<br>
633      import java.io.IOException;<br>
634      import java.io.InputStream;<br>
635      import java.io.FileInputStream;<br>
636      import java.io.DataInputStream;<br>
637      import java.io.ByteArrayInputStream;<br>
638      import java.io.FileOutputStream;<br>
639      import java.security.spec.*;<br>
640      import java.security.cert.Certificate;<br>
641      import java.security.cert.CertificateFactory;<br>
642      import java.util.Collection;<br>
643      import java.util.Iterator;<br>
644      <br>
645      /**<br>
646      &nbsp;* ImportKey.java<br>
647      &nbsp;*<br>
648      &nbsp;* &lt;p&gt;This class imports a key and a certificate
 > into a keystore<br>
649      &nbsp;* (&lt;code&gt;$home/keystore.ImportKey&lt;/code&gt;)
 >. If the keystore is<br>
650      &nbsp;* already present, it is simply deleted. Both the key
 > and the<br>
651      &nbsp;* certificate file must be in &lt;code&gt;DER&lt;/cod
 >e&gt;-format. The key must be<br>
652      &nbsp;* encoded with &lt;code&gt;PKCS#8&lt;/code&gt;-format
 >. The certificate must be<br>
653      &nbsp;* encoded in &lt;code&gt;X.509&lt;/code&gt;-format.&l
 >t;/p&gt;<br>
654      &nbsp;*<br>
655      &nbsp;* &lt;p&gt;Key format:&lt;/p&gt;<br>
656      &nbsp;* &lt;p&gt;&lt;code&gt;openssl pkcs8 -topk8 -nocrypt 
 >-in YOUR.KEY -out YOUR.KEY.der<br>
657      &nbsp;* -outform der&lt;/code&gt;&lt;/p&gt;<br>
658      &nbsp;* &lt;p&gt;Format of the certificate:&lt;/p&gt;<br>
659      &nbsp;* &lt;p&gt;&lt;code&gt;openssl x509 -in YOUR.CERT -ou
 >t YOUR.CERT.der -outform<br>
660      &nbsp;* der&lt;/code&gt;&lt;/p&gt;<br>
661      &nbsp;* &lt;p&gt;Import key and certificate:&lt;/p&gt;<br>
662      &nbsp;* &lt;p&gt;&lt;code&gt;java comu.ImportKey YOUR.KEY.d
 >er YOUR.CERT.der&lt;/code&gt;&lt;/p&gt;&lt;br /&gt;<br>
663      &nbsp;*<br>
664      &nbsp;* &lt;p&gt;&lt;em&gt;Caution:&lt;/em&gt; the old &lt;
 >code&gt;keystore.ImportKey&lt;/code&gt;-file is<br>
665      &nbsp;* deleted and replaced with a keystore only containin
 >g &lt;code&gt;YOUR.KEY&lt;/code&gt;<br>
666      &nbsp;* and &lt;code&gt;YOUR.CERT&lt;/code&gt;. The keystor
 >e and the key has no password;<br>
667      &nbsp;* they can be set by the &lt;code&gt;keytool -keypass
 >wd&lt;/code&gt;-command for setting<br>
668      &nbsp;* the key password, and the &lt;code&gt;keytool -stor
 >epasswd&lt;/code&gt;-command to set<br>
669      &nbsp;* the keystore password.<br>
670      &nbsp;* &lt;p&gt;The key and the certificate is stored unde
 >r the alias<br>
671      &nbsp;* &lt;code&gt;importkey&lt;/code&gt;; to change this,
 > use &lt;code&gt;keytool -keyclone&lt;/code&gt;.<br>
672      &nbsp;*<br>
673      &nbsp;* Created: Fri Apr 13 18:15:07 2001<br>
674      &nbsp;* Updated: Fri Apr 19 11:03:00 2002<br>
675      &nbsp;*<br>
676      &nbsp;* @author Joachim Karrer, Jens Carlberg<br>
677      &nbsp;* @version 1.1<br>
678      &nbsp;**/<br>
679      public class ImportKey&nbsp; {<br>
680      &nbsp;&nbsp; &nbsp;<br>
681      &nbsp;&nbsp;&nbsp; /**<br>
682      &nbsp;&nbsp;&nbsp;&nbsp; * &lt;p&gt;Creates an InputStream 
 >from a file, and fills it with the complete<br>
683      &nbsp;&nbsp;&nbsp;&nbsp; * file. Thus, available() on the r
 >eturned InputStream will return the<br>
684      &nbsp;&nbsp;&nbsp;&nbsp; * full number of bytes the file co
 >ntains&lt;/p&gt;<br>
685      &nbsp;&nbsp;&nbsp;&nbsp; * @param fname The filename<br>
686      &nbsp;&nbsp;&nbsp;&nbsp; * @return The filled InputStream<b
 >r>
687      &nbsp;&nbsp;&nbsp;&nbsp; * @exception IOException, if the S
 >treams couldn't be created.<br>
688      &nbsp;&nbsp;&nbsp;&nbsp; **/<br>
689      &nbsp;&nbsp;&nbsp; private static InputStream fullStream ( 
 >String fname ) throws IOException {<br>
690      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileInputStream 
 >fis = new FileInputStream(fname);<br>
691      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataInputStream 
 >dis = new DataInputStream(fis);<br>
692      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] bytes = n
 >ew byte[dis.available()];<br>
693      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dis.readFully(by
 >tes);<br>
694      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ByteArrayInputSt
 >ream bais = new ByteArrayInputStream(bytes);<br>
695      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return bais;<br>
696      &nbsp;&nbsp;&nbsp; }<br>
697      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>
698      &nbsp;&nbsp;&nbsp; /**<br>
699      &nbsp;&nbsp;&nbsp;&nbsp; * &lt;p&gt;Takes two file names fo
 >r a key and the certificate for the key,<br>
700      &nbsp;&nbsp;&nbsp;&nbsp; * and imports those into a keystor
 >e. Optionally it takes an alias<br>
701      &nbsp;&nbsp;&nbsp;&nbsp; * for the key.<br>
702      &nbsp;&nbsp;&nbsp;&nbsp; * &lt;p&gt;The first argument is t
 >he filename for the key. The key should be<br>
703      &nbsp;&nbsp;&nbsp;&nbsp; * in PKCS8-format.<br>
704      &nbsp;&nbsp;&nbsp;&nbsp; * &lt;p&gt;The second argument is 
 >the filename for the certificate for the key.<br>
705      &nbsp;&nbsp;&nbsp;&nbsp; * &lt;p&gt;If a third argument is 
 >given it is used as the alias. If missing,<br>
706      &nbsp;&nbsp;&nbsp;&nbsp; * the key is imported with the ali
 >as importkey<br>
707      &nbsp;&nbsp;&nbsp;&nbsp; * &lt;p&gt;The name of the keystor
 >e file can be controlled by setting<br>
708      &nbsp;&nbsp;&nbsp;&nbsp; * the keystore property (java -Dke
 >ystore=mykeystore). If no name<br>
709      &nbsp;&nbsp;&nbsp;&nbsp; * is given, the file is named &lt;
 >code&gt;keystore.ImportKey&lt;/code&gt;<br>
710      &nbsp;&nbsp;&nbsp;&nbsp; * and placed in your home director
 >y.<br>
711      &nbsp;&nbsp;&nbsp;&nbsp; * @param args [0] Name of the key 
 >file, [1] Name of the certificate file<br>
712      &nbsp;&nbsp;&nbsp;&nbsp; * [2] Alias for the key.<br>
713      &nbsp;&nbsp;&nbsp;&nbsp; **/<br>
714      &nbsp;&nbsp;&nbsp; public static void main ( String args[])
 > {<br>
715      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>
716      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // change this i
 >f you want another password by default<br>
717      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String keypass =
 > "importkey";<br>
718      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>
719      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // change this i
 >f you want another alias by default<br>
720      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String defaultal
 >ias = "importkey";<br>
721      <br>
722      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // change this i
 >f you want another keystorefile by default<br>
723      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String keystoren
 >ame = System.getProperty("keystore");<br>
724      <br>
725      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (keystorename
 > == null)<br>
726      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; keystorename = System.getProperty("user.home")+<br>
727      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.getProperty("file.separato
 >r")+<br>
728      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "keystore.ImportKey"; // especial
 >ly this ;-)<br>
729      <br>
730      <br>
731      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // parsing comma
 >nd line input<br>
732      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String keyfile =
 > "";<br>
733      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String certfile 
 >= "";<br>
734      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (args.length 
 >&lt; 2 || args.length&gt;3) {<br>
735      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; System.out.println("Usage: java comu.ImportKey keyfile ce
 >rtfile [alias]");<br>
736      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; System.exit(0);<br>
737      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br>
738      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; keyfile = args[0];<br>
739      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; certfile = args[1];<br>
740      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; if (args.length&gt;2)<br>
741      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; defaultalias = args[2];<br>
742      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
743      <br>
744      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br>
745      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; // initializing and clearing keystore<br>
746      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; KeyStore ks = KeyStore.getInstance("JKS", "SUN");<br>
747      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; ks.load( null , keypass.toCharArray());<br>
748      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; System.out.println("Using keystore-file : "+keystorename)
 >;<br>
749      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; ks.store(new FileOutputStream ( keystorename&nbsp; ),<br>
750      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; keypass.t
 >oCharArray());<br>
751      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; ks.load(new FileInputStream ( keystorename ),<br>
752      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; keypass.t
 >oCharArray());<br>
753      <br>
754      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; // loading Key<br>
755      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; InputStream fl = fullStream (keyfile);<br>
756      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; byte[] key = new byte[fl.available()];<br>
757      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; KeyFactory kf = KeyFactory.getInstance("RSA");<br>
758      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; fl.read ( key, 0, fl.available() );<br>
759      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; fl.close();<br>
760      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; PKCS8EncodedKeySpec keysp = new PKCS8EncodedKeySpec ( key
 > );<br>
761      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; PrivateKey ff = kf.generatePrivate (keysp);<br>
762      <br>
763      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; // loading CertificateChain<br>
764      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; CertificateFactory cf = CertificateFactory.getInstance("X
 >.509");<br>
765      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; InputStream certstream = fullStream (certfile);<br>
766      <br>
767      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; Collection c = cf.generateCertificates(certstream) ;<br>
768      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; Certificate[] certs = new Certificate[c.toArray().length]
 >;<br>
769      <br>
770      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; if (c.size() == 1) {<br>
771      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; certstream = fullStream (certfile
 >);<br>
772      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("One certifica
 >te, no chain.");<br>
773      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Certificate cert = cf.generateCer
 >tificate(certstream) ;<br>
774      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; certs[0] = cert;<br>
775      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; } else {<br>
776      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Certificate c
 >hain length: "+c.size());<br>
777      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; certs = (Certificate[])c.toArray(
 >);<br>
778      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; }<br>
779      <br>
780      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; // storing keystore<br>
781      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; ks.setKeyEntry(defaultalias, ff,<br>
782      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs
 >p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; keypass.toCharArray(),<br>
783      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs
 >p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; certs );<br>
784      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; System.out.println ("Key and certificate stored.");<br>
785      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; System.out.println ("Alias:"+defaultalias+"&nbsp; Passwor
 >d:"+keypass);<br>
786      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; ks.store(new FileOutputStream ( keystorename ),<br>
787      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; key
 >pass.toCharArray());<br>
788      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Excepti
 >on ex) {<br>
789      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
 >;&nbsp; ex.printStackTrace();<br>
790      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
791      &nbsp;&nbsp;&nbsp; }<br>
792      <br>
793      }// KeyStore<br>

Back to History