1 /*
   2  * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 
  24 import jdk.test.lib.SecurityTools;
  25 
  26 import java.security.KeyStore;
  27 
  28 /*
  29  * @test
  30  * @bug 6415696 6931562 8180570
  31  * @requires os.family == "windows"
  32  * @library /test/lib
  33  * @library /test/jdk/java/security/testlibrary
  34  * @summary Test "keytool -changealias" using the Microsoft CryptoAPI provider.
  35  */
  36 public class KeytoolChangeAlias {
  37     public static void main(String[] args) throws Exception {
  38 
  39         KeyStore ks = KeyStore.getInstance("Windows-MY");
  40         ks.load(null, null);
  41 
  42         try {
  43             ks.setCertificateEntry("246810", CertUtils.getCertFromFile("246810.cer"));
  44 
  45             if (ks.containsAlias("13579")) {
  46                 ks.deleteEntry("13579");
  47             }
  48 
  49             int before = ks.size();
  50 
  51             ks.store(null, null); // no-op, but let's do it before a keytool command
  52 
  53             SecurityTools.keytool("-changealias",
  54                     "-storetype", "Windows-My",
  55                     "-alias", "246810",
  56                     "-destalias", "13579").shouldHaveExitValue(0);
  57 
  58             ks.load(null, null);
  59 
  60             if (ks.size() != before) {
  61                 throw new Exception("error: unexpected number of entries in the "
  62                         + "Windows-MY store. Before: " + before
  63                         + ". After: " + ks.size());
  64             }
  65 
  66             if (!ks.containsAlias("13579")) {
  67                 throw new Exception("error: cannot find the new alias name"
  68                         + " in the Windows-MY store");
  69             }
  70         } finally {
  71             ks.deleteEntry("13579");
  72             ks.deleteEntry("246810");
  73             ks.store(null, null);
  74         }
  75     }
  76 }