forked from kjur/jsrsasign
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtool_httpscfg.html
executable file
·507 lines (457 loc) · 24.3 KB
/
tool_httpscfg.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8' />
<meta http-equiv="X-UA-Compatible" content="chrome=1" />
<meta name="description" content="HTTPS設定ファイル生成ツール" />
<link rel="stylesheet" type="text/css" media="screen" href="stylesheets/stylesheet.css">
<title>HTTPS設定ファイル生成ツール0.5(ベータ版)</title>
<!-- for pkcs5pkey -->
<script language="JavaScript" type="text/javascript" src="jsrsasign-latest-all-min.js"></script>
<script language="JavaScript" type="text/javascript">
/********************************************
* 各種ガイドラインでの暗号スイートの定義
********************************************/
var OPENSSL_CIPHERSUITE = {
"cryptrec1": "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256",
"cryptrec2": "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-CAMELLIA128-SHA:DHE-RSA-AES128-SHA:AES128-GCM-SHA256:AES128-SHA256:CAMELLIA128-SHA:AES128-SHA:ECDH-ECDSA-AES128-GCM-SHA256:ECDH-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES256-SHA:AES256-GCM-SHA384:AES256-SHA256:CAMELLIA256-SHA:AES256-SHA:ECDH-ECDSA-AES256-GCM-SHA384:ECDH-RSA-AES256-GCM-SHA384",
"cryptrec3": "DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-CAMELLIA128-SHA:DHE-RSA-AES128-SHA:AES128-GCM-SHA256:AES128-SHA256:CAMELLIA128-SHA:AES128-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES256-SHA:AES256-GCM-SHA384:AES256-SHA256:CAMELLIA256-SHA:AES256-SHA:RC4-SHA:EDH-RSA-DES-CBC3-SHA:DES-CBC3-SHA",
"mozilla1": "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK",
"mozilla2": "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA",
"mozilla3": "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA",
"bullet1": "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:EDH-RSA-DES-CBC3-SHA",
"bullet2": "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:EDH-RSA-DES-CBC3-SHA:AES128-SHA:AES256-SHA:DES-CBC3-SHA:ECDHE-RSA-RC4-SHA:RC4-SHA",
"qualysblog": "EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:EDH+aRSA:RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS",
"openssl_default": "DEFAULT",
"redhat_default": "HIGH:!aNULL:!MD5:!RC4",
"centos6_default": "ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW",
"ubuntu12_default": "HIGH:MEDIUM:!aNULL:!MD5",
"general_default": "ALL:!aNULL:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM",
};
/********************************************
* 各サーバー(バージョン)の設定テンプレート
********************************************/
var CFG_TEMPLATE = {
/* Apache 2.4系テンプレート */
"apache24":
(function() {/*
# sample ssl.conf for Apache 2.4
Listen 443 https
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
SSLSessionCache shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout 300
SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
<VirtualHost _default_:443>
ErrorLog logs/ssl_error_log
TranferLog logs/ssl_access_log
LogLevel warn
SSLEngine on
SSLProtocol %%%PROTOCOL%%%
SSLCipherSuite %%%CIPHERSUITE%%%
%%%CIPHERORDER%%%
SSLCertificateFile conf/ssl/server.crt
SSLCertificateKeyFile conf/ssl/server.key
%%%COMPRESSION%%%
# Public Key Pinningを有効にするにはコメントアウトを外して下さい
#Header always set Public-Key-Pins "%%%KEYPINNING%%%"
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
BrowserMatch "MSIE [2-5]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
</VirtualHost>
*/}).toString().match(/\/\*([^]*)\*\//)[1],
/* Apache 2.2系テンプレート */
"apache22":
(function() {/*
# sample ssl.conf for Apache 2.2
LoadModule ssl_module modules/mod_ssl.so
Listen 443
SSLPassPhraseDialog builtin
SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout 300
SSLMutex default
SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
<VirtualHost _default_:443>
ErrorLog logs/ssl_error_log
TranferLog logs/ssl_access_log
LogLevel warn
SSLEngine on
SSLProtocol %%%PROTOCOL%%%
SSLCipherSuite %%%CIPHERSUITE%%%
%%%CIPHERORDER%%%
SSLCertificateFile conf/ssl/server.crt
SSLCertificateKeyFile conf/ssl/server.key
SSLCertificateChainFile conf/ssl/chain.crt
%%%COMPRESSION%%%
# Public Key Pinningを有効にするにはコメントアウトを外して下さい
#Header always set Public-Key-Pins "%%%KEYPINNING%%%"
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
</VirtualHost>
*/}).toString().match(/\/\*([^]*)\*\//)[1],
/* nginx テンプレート */
"nginx":
(function() {/*
# /etc/nginx/conf.d/ssl.conf - 生成されたNginx SSL設定ファイル
server {
listen 443;
#server_name example.jp;
ssl on;
ssl_certificate /etc/nginx/cert.crt;
ssl_certificate_key /etc/nginx/cert.key;
ssl_session_timeout 5m;
ssl_protocols %%%PROTOCOL%%%;
ssl_ciphers %%%CIPHERSUITE%%%;
%%%CIPHERORDER%%%
# Public-Key-Pinningを有効にするにはコメントアウトを外してください
#add_header Public-Key-Pins '%%%KEYPINNING%%%';
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
*/}).toString().match(/\/\*([^]*)\*\//)[1],
"lighttpd":
(function() {/*
# sample lighttpd HTTPS settings - 生成されたlighttpd SSL設定ファイル
server.module += ("mod_setenv")
$SERVER["socket"] == "0.0.0.0:443" {
ssl.engine = "enable"
ssl.pemfile = "/etc/lighttpd/server.key"
ssl.ca-file = "/etc/lighttpd/ca-bundle.pem"
%%%PROTOCOL%%%
ssl.cipher-list = "%%%CIPHERSUITE%%%"
%%%CIPHERORDER%%%
# TLS圧縮のフラグuse-compressionは最新版では設定エラー警告表示される
# 古い版では設定可能
#ssl.use-compression = "disable"
# Public-Key-Pinningを有効にするにはコメントアウトを外してください
#setenv.add-response-header = (
# "Public-Key-Pins" => "%%%KEYPINNING%%%"
#)
setenv.add-environment = ("HTTPS"=>"on")
}
*/}).toString().match(/\/\*([^]*)\*\//)[1],
};
/********************************************
* ローカル関数定義
********************************************/
function _doGen() {
var f1 = document.form1;
var sCertPEM = f1.cert1.value;
var guidename = f1.guidename.value;
var serverapp = f1.serverapp.value;
var cert1 = f1.cert1.value;
var cert2 = f1.cert2.value;
var cert3 = f1.cert3.value;
//alert(1);
var cfg = CFG_TEMPLATE[f1.serverapp.value];
cfg = cfg.replace("%%%PROTOCOL%%%", _getProtocolValue(guidename, serverapp));
cfg = cfg.replace("%%%CIPHERSUITE%%%", OPENSSL_CIPHERSUITE[guidename]);
cfg = _updateOrder(cfg, guidename, serverapp);
cfg = _updateCompression(cfg, guidename, serverapp);
cfg = _updatePinning(cfg, [cert1, cert2, cert3], serverapp);
f1.resultcfg.value = cfg;
}
function _updateCompression(cfg, guidename, serverapp) {
// 注:nginx は新しいもので対応、設定は不要
if (guidename.indexOf("cryptrec") != -1 ||
guidename.indexOf("mozilla") != -1 ||
guidename.indexOf("bullet") != -1) {
if (serverapp.indexOf("apache") != -1) {
cfg = cfg.replace("%%%COMPRESSION%%%", "SSLCompression off");
}
} else {
if (serverapp.indexOf("apache") != -1) {
cfg = cfg.replace("%%%COMPRESSION%%%", "#SSLCompression off");
}
}
return cfg;
}
function _updateOrder(cfg, guidename, serverapp) {
var s = "# -- cipherorder not specified for this guide --";
if (serverapp.indexOf("apache") != -1) s = "SSLHonorCipherOrder On";
if (serverapp == "nginx") s = "ssl_prefer_server_ciphers on;";
if (serverapp == "lighttpd") s = "ssl.honor-cipher-order = \"enable\"";
if (guidename.indexOf("cryptrec") == -1 &&
guidename.indexOf("mozilla") == -1 &&
guidename.indexOf("bullet") == -1) {
cfg = cfg.replace("%%%CIPHERORDER%%%", "#" + s);
} else {
cfg = cfg.replace("%%%CIPHERORDER%%%", s);
}
return cfg;
}
function _updatePinning(cfg, aCert, serverapp) {
if (aCert.length == 0) {
cfg = cfg.replace("%%%KEYPINNING%%%", "");
return cfg;
}
var headerValue = _getPinHeaderValue(aCert, 60);
if (serverapp.indexOf("apache") != -1 || serverapp == "lighttpd") {
headerValue = headerValue.replace(/"/g, "\\\"");
}
cfg = cfg.replace("%%%KEYPINNING%%%", headerValue);
return cfg;
}
function _getPinHeaderValue(aCert, nDay) {
var a = _getCertPinArray(aCert);
var s = "";
for (var i = 0; i < a.length; i++) {
s += "pin-sha256=\"" + a[i] + "\"";
}
if (nDay != null || nDay > 0) {
var nSec = nDay * 24 * 60 * 60;
s += "; max-age=" + nSec;
}
s += "; includeSubDomains";
return s;
}
function _getCertPinArray(aCert) {
var a = new Array();
for (var i = 0; i < aCert.length; i++) {
var c = aCert[i];
if (c != "") a.push(_getSHA256HashB64OfCertPEM(c));
}
return a;
}
function _getSHA256HashB64OfCertPEM(sCertPEM) {
var keyhex = _getPublicKeyInfoHexOfCertPEM(sCertPEM);
var hashhex = KJUR.crypto.Util.hashHex(keyhex, "sha256");
var hashb64 = hextob64(hashhex);
return hashb64;
}
function _getPublicKeyInfoHexOfCertPEM(sCertPEM) {
var hCert = X509.pemToHex(sCertPEM);
var pos = X509.getPublicKeyInfoPosOfCertHEX(hCert);
var publicKeyInfoHex = ASN1HEX.getHexOfTLV_AtObj(hCert, pos);
return publicKeyInfoHex;
};
var LIGHTTPD_NOT_SSL2 = "ssl.use-sslv2 = \"disable\"";
var LIGHTTPD_NOT_SSL = "ssl.use-sslv2 = \"disable\"\r\n ssl.use-sslv3 = \"disable\"";
var LIGHTTPD_TLS1112 = "ssl.use-sslv2 = \"disable\"\r\n ssl.use-sslv3 = \"disable\"\r\n ssl.use-tlsv1 = \"disable\"";
var LIGHTTPD_TLS12 = "ssl.use-sslv2 = \"disable\"\r\n ssl.use-sslv3 = \"disable\"\r\n ssl.use-tlsv1 = \"disable\"\r\n ssl.use-tlsv1.1 = \"disable\"";
function _getProtocolValue(guideName, serverType) {
if (serverType == "apache24" || serverType == "apache22") {
if (guideName == "cryptrec1") return "TLSv1.2";
if (guideName == "cryptrec2") return "all -SSLv2 -SSLv3";
if (guideName == "cryptrec3") return "all -SSLv2";
if (guideName == "mozilla1") return "all -SSLv3 -TLSv1";
if (guideName == "mozilla2") return "all -SSLv3";
if (guideName == "mozilla3") return "all";
if (guideName == "qualysblog") return "all -SSLv2 -SSLv3";
return "all"; // デフォルト
}
if (serverType == "nginx") {
if (guideName == "cryptrec1") return "TLSv1.2";
if (guideName == "cryptrec2") return "TLSv1.2 TLSv1.1 TLSv1";
if (guideName == "cryptrec3") return "TLSv1.2 TLSv1.1 TLSv1 SSLv3";
if (guideName == "mozilla1") return "TLSv1.2 TLSv1.1";
if (guideName == "mozilla2") return "TLSv1.2 TLSv1.1 TLSv1";
if (guideName == "mozilla3") return "TLSv1.2 TLSv1.1 TLSv1 SSLv3";
if (guideName == "qualysblog") return "TLSv1.2 TLSv1.1 TLSv1 SSLv3";
return "TLSv1.2 TLSv1.1 TLSv1 SSLv3"; // デフォルト
}
if (serverType == "lighttpd") {
if (guideName == "cryptrec1") return LIGHTTPD_TLS12;
if (guideName == "cryptrec2") return LIGHTTPD_NOT_SSL;
if (guideName == "cryptrec3") return LIGHTTPD_NOT_SSL2;
if (guideName == "mozilla1") return LIGHTTPD_TLS1112;
if (guideName == "mozilla2") return LIGHTTPD_NOT_SSL;
if (guideName == "mozilla3") return LIGHTTPD_NOT_SSL2;
if (guideName == "qualysblog") return LIGHTTPD_NOT_SSL2;
return LIGHTTPD_NOT_SSL2; // デフォルト
}
return "# --protocol setting not supported--";
}
</script>
</head>
<body>
<!-- HEADER -->
<div id="header_wrap" class="outer">
<header class="inner">
<h1 id="project_title">HTTPS設定ファイル生成ツール0.5(ベータ版)</h1>
<h2 id="project_tagline">各種ガイドラインに応じたApache、nginx、lighttpdなど主要なサーバーのHTTPS設定を自動生成します</h2>
<a href="http://kjur.github.io/jsrsasign/">TOP</a> |
</header>
</div>
<!-- MAIN CONTENT -->
<div id="main_content_wrap" class="outer">
<section id="main_content" class="inner">
<!-- now editing -->
<form name="form1">
<!-- ******************************* -->
<h4>簡易設定情報</h4>
<p>
ガイドラインの種類:
<select name="guidename">
<option value="cryptrec1">CRYPTREC/IPAガイド(2015.05版)高セキュリティ型 - 高いセキュリティを求める医療・金融、政府機関等向け
<option value="cryptrec2">CRYPTREC/IPAガイド(2015.05版)推奨セキュリティ型 - 標準的な設定
<option value="cryptrec3">CRYPTREC/IPAガイド(2015.05版)セキュリティ例外型 - 古いフィーチャーフォン、ゲーム機も対象に含む場合
<option value="mozilla1">Mozilla Modern Compatibility Profile - 高セキュリティ
<option value="mozilla2">Mozilla Intermediate Compatibility Profile - 中セキュリティ(デフォルト)
<option value="mozilla3">Mozilla Old Backward Compatibility Profile - 低セキュリティ
<option value="bullet1">Bulletproof SSL and TLS - recommended(中)
<option value="bullet2">Bulletproof SSL and TLS - compatibility(低)
<option value="qualysblog">Qualys社のブログによる推奨設定
<option value="openssl_default">OpenSSLデフォルト設定
<option value="redhat_default">RedHat Linuxデフォルト設定
<option value="centos6_default">CentOS 6デフォルト設定
<option value="ubuntu12_default">Ubuntu 12デフォルト設定
<option value="general_default">よくあるデフォルト設定
</select>
</p>
<p>
サーバーソフトウェアの種類:
<select name="serverapp">
<option value="apache24">Apache HTTP Server 2.4
<option value="apache22">Apache HTTP Server 2.2
<option value="nginx">nginx
<option value="lighttpd">lighttpd
</select>
</p>
<p>
a) SSLサーバー証明書PEM<br/>
<textarea name="cert1" cols="80" rows="3"></textarea><br/>
b) 中間CA証明書1(SSLサーバーに近い順)<br/>
<textarea name="cert2" cols="80" rows="3"></textarea><br/>
c) 中間CA証明書2(SSLサーバーに近い順、ルートに近い方)<br/>
<textarea name="cert3" cols="80" rows="3"></textarea>
<br/>
</p>
<p>
<input type="button" value="生成" onClick="_doGen();"/>
<input type="reset" name="reset" value="Reset"/>
</p>
<h4>生成された設定ファイルの一部</h4>
<textarea name="resultcfg" cols="100" rows="40">
</textarea>
<h4>本ツールの説明</h4>
<p>
<a href="http://www.ipa.go.jp/security/vuln/ssl_crypt_config.html" target="_blank">
「CRYPTREC/IPA SSL/TLS暗号設定ガイドライン~安全なウェブサイトのために(暗号設定対策編)~」</a>
の発行を記念しまして、ウェブサーバーのSSL設定ファイルを生成するツールのベータ版を公開します。
本ツールは、CRYPTOREC/IPAのガイドラインで定義されている「高セキュリティ型」
「推奨セキュリティ型」「セキュリティ例外型」の設定に加え、Mozillaや他のプロファイルの
推奨設定もメニューで選ぶだけで簡単に生成できます。
</p>
<p>
現時点ではベータ版のため、
<ul>
<li>Apache 2.4系、Apache 2.2系、nginx、lighttpdのssl.conf設定ファイルしか生成できない。</li>
<li>暗号スイート、プロトコル、暗号スイート順序、TLS圧縮オフ、Public Key Pinningしか設定されない。</li>
<li>OCSP stapling、HSTSなどは未対応。(近日対応予定)</li>
</ul>
となっていますが、よかったらご利用ください。Public Key Pinningの設定に対応するためは、
SSLサーバー証明書、中間CA証明書のPEM形式でコピーペーストして頂ければ、自動的にPinningの
設定を出力します。
</p>
<p>
本ツールは、<a href="https://twitter.com/kjur">@kjur</a> が個人的に作成したものであり、CRYPTRECやIPAにより公開されているページではありません。バグ報告や問題のご指摘は<a href="https://github.com/kjur/jsrsasign/issues">こちらのバグトラッカー</a>で日本語でお知らせください。
</p>
<h4>使用方法</h4>
<p>
<ul>
<li>準拠したいガイドラインのパターンを選択します。例えば、「CRYPTREC/IPA SSL設定ガイド 推奨セキュリティ型」など選択します。</li>
<li>設定対象のウェブサーバーのソフトウェアを指定します。例えば Apache 2.4 などを選択します。</li>
<li>Certificate Pinning(Public Key Pinning)のヘッダ情報を設定したい場合には、PEMテキスト形式の証明書を
コピーペーストします。
SSLサーバー証明書からルート証明書の手前の中間CA証明書までをa) b) c)に順にコピーペーストしてください。
中間証CA証明書は2段まで対応しています。例えば、ルート>中間>サーバー証明書の3段である場合には、
a) b) にのみ登録し c) は空欄としてください。
</li>
<li>「生成」ボタンを押せば、ガイドに従った設定ファイル(の一部)が下に表示されます。</li>
<li>生成された設定ファイル(一部)の内容を設定し、動作確認する。</li>
</ul>
</p>
<h4>注意事項</h4>
<p>
必ずテスト環境および本番環境で、期待された動作をするかご確認ください。
</p>
<h4>参考リンク</h4>
<ul>
<li><b>ガイドライン:</b>
<ul>
<li><a href="http://www.ipa.go.jp/security/vuln/ssl_crypt_config.html" target="_blank">
CRYPTREC/IPA SSL/TLS暗号設定ガイドライン~安全なウェブサイトのために(暗号設定対策編)~</a></li>
<li><a href="https://wiki.mozilla.org/Security/Server_Side_TLS">
Mozilla Wiki: Security/Server Side TLS</a></li>
<li><a href="https://www.feistyduck.com/books/bulletproof-ssl-and-tls/">Bulletproof SSL and TLS by Ivan Ristic
</a></li>
<li><a href="https://community.qualys.com/blogs/securitylabs/2013/08/05/configuring-apache-nginx-and-openssl-for-forward-secrecy">QUALYS BLOG: Configuring Apache, Nginx, and OpenSSL for Forward Secrecy</a></li>
<li><a href="https://cipherli.st/">Cipherli.st: String Ciphers for Apache, nginx and Lighttpd</a></li>
<li><a href="http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-52r1.pdf">
NIST SP 800-52r1 Guidelines for the Selection, Configuration, and Use of TLS Implementation (Apr 2014)</a></li>
</ul>
</li>
<li><b>他サイトSSL設定ファイル生成ツール:</b>
<ul>
<li><a href="https://mozilla.github.io/server-side-tls/ssl-config-generator/">
Mozilla SSL Configuration Generator</a></li>
<li><a href="https://projects.dm.id.lv/s/pkp-online/calculator.html">
JavaScript Public-Key-Pins (HPKP) calculator v1.0.2</a></li>
</ul>
<li><b>各ソフトウェアのサーバーSSL設定マニュアル:</b>
<ul>
<li><a href="http://nginx.org/en/docs/http/ngx_http_ssl_module.html">
nginx: odule ngx_http_ssl_module</a></li>
<li><a href="http://redmine.lighttpd.net/projects/1/wiki/docs_ssl">
lighttpd: Secure HTTP</a></li>
</ul>
<li><b>その他学習資料:</b>
<ul>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/Security/Public_Key_Pinning">
Mozilla Developper Network: Public Key Pinning</a></li>
<li><a href="https://www.nic.ad.jp/ja/materials/iw/2014/proceedings/s14/s14-urushima.pdf">
Internet Week 2014 講演資料 サーバーのSSL/TLS設定のツボ</a></li>
<li><a href="http://www.jnsa.org/seminar/pki-day/2015/data/2-1_urushima.pdf">
JNSA PKI Day 2015 講演資料 SSL/TLS生誕20年、脆弱性と対策を振返る</a></li>
<li><a href="http://blog.livedoor.jp/k_urushima/archives/1768181.html">
「RFC 7525 TLSとDTLSの安全な利用に関する推奨事項」の公開</a></li>
</ul>
</ul>
<h4>補足説明</h4>
<p>
Public Key Pinningのために、証明書をテキスト添付するのは気持ち悪いと思われるかもしれませんが、
ご安心ください。
すべての処理はブラウザのJavaScriptで行われ、サーバーに送信することもなく、
HTMLファイルとJavaScriptファイルさえあれば、オフラインでも実行することができます。
具体的には自作の<a href="https://kjur.github.io/jsrsasign/">jsrsasign</a>という、
JavaScript暗号ライブラリを使って、PEM形式のX.509証明書を解析し、SubjectPublicKeyInfoから
公開鍵を取り出し、ハッシュ計算し、Pinning用のヘッダ値を生成しています。
</p>
<h4>ニュース</h4>
<ul>
<li>2015.06.21 - 0.5ベータ版 Bulletproof SSL and TLSへの対応</li>
<li>2015.05.16 - 0.4ベータ版 lighttpdに対応</li>
<li>2015.05.15 - 0.3ベータ版 nginxのMozillaのガイドのprotocol値の誤りの修正</li>
<li>2015.05.14 - 0.2ベータ版 nginx設定、TLS圧縮オフに対応
(CRYPTRECガイドにはAppendixに圧縮オフ設定例はなかった)</li>
<li>2015.05.13 - 0.1ベータ版 初版公開</li>
</ul>
</form>
<!-- now editing -->
</section>
</div>
<!-- FOOTER -->
<div id="footer_wrap" class="outer">
<footer class="inner">
<p class="copyright">jsrsasign maintained by <a href="https://github.com/kjur">kjur</a></p>
<p>Published with <a href="http://pages.github.com">GitHub Pages</a></p>
<div align="center" style="color: white">
Copyright © 2015 Kenji Urushima. All rights reserved.
</div>
</footer>
</div>
</body>
</html>