Handle hostnames with upper-case letters
[webmin.git] / usermin / edit_ssl.cgi
1 #!/usr/local/bin/perl
2 # edit_ssl.cgi
3 # Webserver SSL form
4
5 require './usermin-lib.pl';
6 &ui_print_header(undef, $text{'ssl_title'}, "");
7 &ReadParse();
8 &get_usermin_miniserv_config(\%miniserv);
9
10 # Show tabs
11 @tabs = map { [ $_, $text{'ssl_tab'.$_}, "edit_ssl.cgi?mode=$_" ] }
12             ( "ssl", "current", "ips", "create", "upload" );
13 print &ui_tabs_start(\@tabs, "mode", $in{'mode'} || $tabs[0]->[0], 1);
14
15 # Basic SSL settings
16 print &ui_tabs_start_tab("mode", "ssl");
17 print $text{'ssl_desc1'},"<p>\n";
18 print $text{'ssl_desc2'},"<p>\n";
19
20 print &ui_form_start("change_ssl.cgi", "post");
21 print &ui_table_start($text{'ssl_header'}, undef, 2);
22
23 print &ui_table_row($text{'ssl_on'},
24         &ui_yesno_radio("ssl", $miniserv{'ssl'}));
25
26 print &ui_table_row($text{'ssl_key'},
27         &ui_textbox("key", $miniserv{'keyfile'}, 40)." ".
28         &file_chooser_button("key"));
29
30 print &ui_table_row($text{'ssl_cert'},
31         &ui_opt_textbox("cert", $miniserv{'certfile'}, 40,
32                         $text{'ssl_cert_def'}."<br>",$text{'ssl_cert_oth'})." ".
33         &file_chooser_button("cert"));
34
35 print &ui_table_row($text{'ssl_redirect'},
36         &ui_yesno_radio("ssl_redirect", $miniserv{'ssl_redirect'}));
37
38 print &ui_table_row($text{'ssl_version'},
39         &ui_opt_textbox("version", $miniserv{'ssl_version'}, 4,
40                         $text{'ssl_auto'}));
41
42 $clist = $miniserv{'ssl_cipher_list'};
43 $cmode = !$clist ? 1 :
44          $clist eq $webmin::strong_ssl_ciphers ? 2 : 0;
45 print &ui_table_row($text{'ssl_cipher_list'},
46         &ui_radio("cipher_list_def", $cmode,
47                   [ [ 1, $text{'ssl_auto'}."<br>" ],
48                     [ 2, $text{'ssl_strong'}."<br>" ],
49                     [ 0, $text{'ssl_clist'}." ".
50                          &ui_textbox("cipher_list",
51                                      $cmode == 0 ? $clist : "", 30) ] ]));
52
53 print &ui_table_row($text{'ssl_extracas'},
54         &ui_textarea("extracas", join("\n",split(/\s+/, $miniserv{'extracas'})),
55                      3, 60)." ".
56         &file_chooser_button("extracas", 0, undef, undef, 1));
57
58 print &ui_table_end();
59 print &ui_form_end([ [ "", $text{'save'} ] ]);
60 print &ui_tabs_end_tab();
61
62 # Page showing current cert
63 print &ui_tabs_start_tab("mode", "current");
64 print "$text{'ssl_current'}<p>\n";
65 print &ui_table_start($text{'ssl_cheader'}, undef, 4);
66 $info = &webmin::cert_info($miniserv{'certfile'} || $miniserv{'keyfile'});
67 foreach $i ('cn', 'o', 'email', 'issuer_cn', 'issuer_o', 'issuer_email',
68             'notafter', 'type') {
69         if ($info->{$i}) {
70                 print &ui_table_row($text{'ca_'.$i}, $info->{$i});
71                 }
72         }
73 @clinks = (
74         "<a href='download_cert.cgi/cert.pem'>".
75         "$text{'ssl_pem'}</a>",
76         "<a href='download_cert.cgi/cert.p12'>".
77         "$text{'ssl_pkcs12'}</a>"
78         );
79 print &ui_table_row($text{'ssl_download'}, &ui_links_row(\@clinks));
80 print &ui_table_end();
81 print &ui_tabs_end_tab();
82
83 # Table listing per-IP SSL certs
84 print &ui_tabs_start_tab("mode", "ips");
85 print "$text{'ssl_ipkeys'}<p>\n";
86 @ipkeys = &webmin::get_ipkeys(\%miniserv);
87 if (@ipkeys) {
88         print &ui_columns_start([ $text{'ssl_ips'}, $text{'ssl_key'},
89                                   $text{'ssl_cert'} ]);
90         foreach $k (@ipkeys) {
91                 print &ui_columns_row([
92                         "<a href='edit_ipkey.cgi?idx=$k->{'index'}'>".
93                         join(", ", @{$k->{'ips'}})."</a>",
94                         "<tt>$k->{'key'}</tt>",
95                         $k->{'cert'} ? "<tt>$k->{'cert'}</tt>"
96                                      : $text{'ssl_cert_def'},
97                         ]);
98                 }
99         print &ui_columns_end();
100         }
101 else {
102         print "<b>$text{'ssl_ipkeynone'}</b><p>\n";
103         }
104 print "<a href='edit_ipkey.cgi?new=1'>$text{'ssl_addipkey'}</a><p>\n";
105 print &ui_tabs_end_tab();
106
107 # SSL key generation form
108 print &ui_tabs_start_tab("mode", "create");
109 print "$text{'ssl_newkey'}<p>\n";
110 my $curkey = &read_file_contents($miniserv{'keyfile'});
111 my $origkey = &read_file_contents("$root_directory/miniserv.pem");
112 if ($curkey eq $origkey) {
113         # System is using the original (insecure) Webmin key!
114         print "<b>$text{'ssl_hole'}</b><p>\n";
115         }
116
117 print &ui_form_start("newkey.cgi");
118 print &ui_table_start($text{'ssl_header1'}, undef, 2);
119
120 $host = $ENV{'HTTP_HOST'};
121 $host =~ s/:.*//;
122 print &webmin::show_ssl_key_form($host, undef, 
123                          "Usermin Webserver on ".&get_system_hostname());
124
125 print &ui_table_row($text{'ssl_newfile'},
126             &ui_textbox("newfile", "$config{'usermin_dir'}/miniserv.pem", 40));
127
128 print &ui_table_row($text{'ssl_usenew'},
129                     &ui_yesno_radio("usenew", 1));
130
131 print &ui_table_end();
132 print &ui_form_end([ [ "", $text{'ssl_create'} ] ]);
133 print &ui_tabs_end_tab();
134
135 # SSL key upload form
136 print &ui_tabs_start_tab("mode", "upload");
137 print "$text{'ssl_savekey'}<p>\n";
138 print &ui_form_start("savekey.cgi", "form-data");
139 print &ui_table_start($text{'ssl_saveheader'}, undef, 2);
140
141 print &ui_table_row($text{'ssl_privkey'},
142                     &ui_textarea("key", undef, 7, 70)."<br>\n".
143                     "<b>$text{'ssl_upload'}</b>\n".
144                     &ui_upload("keyfile"));
145
146 print &ui_table_row($text{'ssl_privcert'},
147                     &ui_radio("cert_def", 1,
148                         [ [ 1, $text{'ssl_same'} ],
149                           [ 0, $text{'ssl_below'} ] ])."<br>\n".
150                     &ui_textarea("cert", undef, 7, 70)."<br>\n".
151                     "<b>$text{'ssl_upload'}</b>\n".
152                     &ui_upload("certfile"));
153
154 print &ui_table_row($text{'ssl_privchain'},
155                     &ui_radio("chain_def", 1,
156                         [ [ 1, $miniserv{'extracas'} ? $text{'ssl_leavechain'}
157                                                      : $text{'ssl_nochain'} ],
158                           [ 0, $text{'ssl_below'} ] ])."<br>\n".
159                     &ui_textarea("chain", undef, 7, 70)."<br>\n".
160                     "<b>$text{'ssl_upload'}</b>\n".
161                     &ui_upload("chainfile"));
162
163 print &ui_table_end();
164 print &ui_form_end([ [ "save", $text{'save'} ] ]);
165 print &ui_tabs_end_tab();
166
167 print &ui_tabs_end(1);
168
169 &ui_print_footer("", $text{'index_return'});
170