Changeset cdd58f1


Ignore:
Timestamp:
Apr 29, 2018 3:46:30 PM (2 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
c73b5b9
Parents:
4d09e50
Message:

SSL Wizard: Change cert type, export cert, show in cert helper,
relay keystore password via POST

Location:
apps
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • apps/i2ptunnel/jsp/ssl.jsp

    r4d09e50 rcdd58f1  
    1010
    1111%><%@page pageEncoding="UTF-8"
    12 %><%@page contentType="text/html" import="java.io.File,net.i2p.crypto.KeyStoreUtil,net.i2p.data.DataHelper,net.i2p.jetty.JettyXmlConfigurationParser"
     12%><%@page contentType="text/html" import="java.io.File,java.io.IOException,net.i2p.crypto.KeyStoreUtil,net.i2p.data.DataHelper,net.i2p.jetty.JettyXmlConfigurationParser"
    1313%><%@page
    1414%><?xml version="1.0" encoding="UTF-8"?>
     
    106106            String nonce = request.getParameter("nonce");
    107107            String newpw = request.getParameter("nofilter_keyPassword");
     108            String kspw = request.getParameter("nofilter_obfKeyStorePassword");
    108109            String appNum = request.getParameter("clientAppNumber");
    109110            String ksPath = request.getParameter("nofilter_ksPath");
     
    113114                if (newpw.length() <= 0)
    114115                    newpw = null;
     116            }
     117            if (kspw != null) {
     118                kspw = JettyXmlConfigurationParser.deobfuscate(kspw);
     119            } else {
     120                kspw = net.i2p.crypto.KeyStoreUtil.DEFAULT_KEYSTORE_PASSWORD;
    115121            }
    116122            if (!editBean.haveNonce(nonce)) {
     
    140146                    altNames.add(altb32);
    141147                File ks = new File(ksPath);
    142                 ok = net.i2p.crypto.KeyStoreUtil.createKeys(ks, "eepsite", name, altNames, b32, newpw);
    143                 if (ok) {
    144                      out.println("Created selfsigned cert");
     148                try {
     149                    Object[] rv = net.i2p.crypto.KeyStoreUtil.createKeysAndCRL(ks, kspw, "eepsite", name, altNames, b32,
     150                                                                               3652, "EC", 256, newpw);
     151                    out.println("Created selfsigned cert");
     152                    // save cert
     153                    java.security.cert.X509Certificate cert = (java.security.cert.X509Certificate) rv[2];
     154                    File f = new net.i2p.util.SecureFile(ctx.getConfigDir(), "certificates");
     155                    if (!f.exists())
     156                        f.mkdir();
     157                    f = new net.i2p.util.SecureFile(f, "eepsite");
     158                    if (!f.exists())
     159                        f.mkdir();
     160                    f = new net.i2p.util.SecureFile(f, b32 + ".crt");
     161                    if (f.exists()) {
     162                        File fb = new File(f.getParentFile(), b32 + ".crt-" + System.currentTimeMillis() + ".bkup");
     163                        net.i2p.util.FileUtil.copy(f, fb, false, true);
     164                    }
     165                    ok = net.i2p.crypto.CertUtil.saveCert(cert, f);
     166                    out.println("selfsigned cert stored");
     167                } catch (IOException ioe) {
     168                    ioe.printStackTrace();
     169                    ok = false;
     170                } catch (java.security.GeneralSecurityException gse) {
     171                    gse.printStackTrace();
     172                    ok = false;
    145173                }
    146174
     
    148176                if (ok) {
    149177                    String obf = JettyXmlConfigurationParser.obfuscate(newpw);
     178                    String obfkspw = JettyXmlConfigurationParser.obfuscate(kspw);
    150179                    File f = new File(jettySSLConfigPath);
    151180                    try {
    152181                        org.eclipse.jetty.xml.XmlParser.Node root;
    153                         root = net.i2p.jetty.JettyXmlConfigurationParser.parse(f);
    154                         //JettyXmlConfigurationParser.setValue(root, "KeyStorePassword", ...);
     182                        root = JettyXmlConfigurationParser.parse(f);
     183                        JettyXmlConfigurationParser.setValue(root, "KeyStorePassword", obfkspw);
    155184                        JettyXmlConfigurationParser.setValue(root, "KeyManagerPassword", obf);
    156185                        JettyXmlConfigurationParser.setValue(root, "TrustStorePassword", obf);
     
    166195                                JettyXmlConfigurationParser.write(root, w);
    167196                                out.println("Jetty configuration updated");
    168                             } catch (java.io.IOException ioe) {
     197                            } catch (IOException ioe) {
    169198                                ioe.printStackTrace();
    170199                                ok = false;
    171200                            } finally {
    172                                 if (w != null) try { w.close(); } catch (java.io.IOException ioe2) {}
     201                                if (w != null) try { w.close(); } catch (IOException ioe2) {}
    173202                            }
    174203                        }
     
    197226                            out.println("Jetty SSL enabled");
    198227                        }
    199                     } catch (java.io.IOException ioe) {
     228                    } catch (IOException ioe) {
    200229                        ioe.printStackTrace();
    201230                        ok = false;
     
    411440                try {
    412441                    org.eclipse.jetty.xml.XmlParser.Node root;
    413                     root = net.i2p.jetty.JettyXmlConfigurationParser.parse(jettyFile);
     442                    root = JettyXmlConfigurationParser.parse(jettyFile);
    414443                    host = JettyXmlConfigurationParser.getValue(root, "host");
    415444                    port = JettyXmlConfigurationParser.getValue(root, "port");
     
    422451                try {
    423452                    org.eclipse.jetty.xml.XmlParser.Node root;
    424                     root = net.i2p.jetty.JettyXmlConfigurationParser.parse(jettySSLFile);
     453                    root = JettyXmlConfigurationParser.parse(jettySSLFile);
    425454                    ksPW = JettyXmlConfigurationParser.getValue(root, "KeyStorePassword");
    426455                    kmPW = JettyXmlConfigurationParser.getValue(root, "KeyManagerPassword");
     
    504533<input type="hidden" name="nofilter_jettySSLFile" value="<%=jettySSLFile%>" />
    505534<input type="password" name="nofilter_keyPassword" title="<%=intl._t("Set password required to access this service")%>" value="" class="freetext password" />
     535<%
     536                if (ksPW != null) {
     537                    if (!ksPW.startsWith("OBF:"))
     538                        ksPW = JettyXmlConfigurationParser.obfuscate(ksPW);
     539%>
     540<input type="hidden" name="nofilter_obfKeyStorePassword" value="<%=ksPW%>" />
     541<%
     542                }
     543%>
    506544</td></tr>
    507545<tr><td class="buttons" colspan="7">
     
    511549            }  // canConfigure
    512550        }  // for client
    513     } catch (java.io.IOException ioe) { ioe.printStackTrace(); }
     551    } catch (IOException ioe) { ioe.printStackTrace(); }
    514552%>
    515553<tr><td colspan="4">
  • apps/jetty/java/src/net/i2p/jetty/JettyXmlConfigurationParser.java

    r4d09e50 rcdd58f1  
    190190     */
    191191    public static String obfuscate(String s) {
     192        if (s.startsWith("OBF:"))
     193            return s;
    192194        return Password.obfuscate(s);
    193195    }
     196
     197    /**
     198     *  De-Obfuscate a password from the XML
     199     *  @param s a string starting with "OBF:"
     200     */
     201    public static String deobfuscate(String s) {
     202        if (!s.startsWith("OBF:"))
     203            return s;
     204        return Password.deobfuscate(s);
     205    }
    194206}
  • apps/routerconsole/java/src/net/i2p/router/web/helpers/CertHelper.java

    r4d09e50 rcdd58f1  
    2323    private static final String I2PTUNNEL_DIR = "i2ptunnel";
    2424    private static final String SAM_DIR = "sam";
    25     private static final String EEPSITE = "eepsite/etc/keystore.ks";
     25    private static final String EEPSITE_DIR = "eepsite";
    2626
    2727    public String getSummary() {
     
    3232            _out.write("</h3>\n");
    3333            // console
    34             output("Console", new File(dir, CONSOLE));
     34            output(_t("Router Console"), new File(dir, CONSOLE));
    3535            // I2CP
    36             output("I2CP", new File(dir, I2CP));
     36            output(_t("I2CP"), new File(dir, I2CP));
    3737
    3838            // i2ptunnel clients
     
    5959                for (int i = 0; i < tunnels.length; i++) {
    6060                    File f = tunnels[i];
    61                     output("SAM", f);
     61                    output(_t("SAM"), f);
    6262                    hasTunnels = true;
    6363                }
     
    6565            if (!hasTunnels)
    6666                output(_t("SAM"), null);
     67
     68            // Eepsite
     69            tunnelDir = new File(dir, EEPSITE_DIR);
     70            hasTunnels = false;
     71            tunnels = tunnelDir.listFiles(new FileSuffixFilter(".crt"));
     72            if (tunnels != null) {
     73                for (int i = 0; i < tunnels.length; i++) {
     74                    File f = tunnels[i];
     75                    String name = f.getName();
     76                    output(_t("Website") + ' ' + name.substring(0, name.length() - 4), f);
     77                    hasTunnels = true;
     78                }
     79            }
     80            if (!hasTunnels)
     81                output(_t("Website"), null);
    6782
    6883            // Family
     
    7590                f = new File(f, family + ".crt");
    7691                output(_t("Family") + ": " + DataHelper.escapeHTML(family), f);
    77             } else {
    78                 _out.write("<p>");
    79                 _out.write(_t("none"));
    80                 _out.write("</p>\n");
    81             }
    82 
    83             // Eepsite
    84             _out.write("<h3>");
    85             _out.write(_t("Website"));
    86             _out.write("</h3>\n");
    87             File ks = new File(_context.getConfigDir(), EEPSITE);
    88             if (ks.exists()) {
    89                 // TODO
    9092            } else {
    9193                _out.write("<p>");
Note: See TracChangeset for help on using the changeset viewer.