|
1 | 1 |
|
2 | 2 |
|
3 | 3 |
|
| 4 | +<!DOCTYPE html> |
| 5 | + |
4 | 6 | <html> |
5 | 7 |
|
6 | 8 | <head> |
| 9 | + <meta charset=utf-8> |
7 | 10 |
|
8 | | - <title>generate certificate chain</title> |
| 11 | + <title> |
| 12 | + Generate Certificate Chain |
| 13 | + </title> |
9 | 14 |
|
10 | | - <base href='https://javascript-2020.github.io/utils/x509/generate-certificate-chain/'> |
| 15 | + <meta name=description content='create a chain of x509 certificates'> |
11 | 16 |
|
12 | | - <link rel='shortcut icon' type='image/x-icon' href='images/favicon.ico'> |
13 | | - |
| 17 | + <base href='https://ext-code.com/utils/x509/generate-certificate-chain/'> |
| 18 | + <link rel=canonical href='https://ext-code.com/utils/x509/generate-certificate-chain/generate-certificate-chain.html'> |
| 19 | + |
| 20 | + <link rel=icon type='image/x-icon' href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAMAAAAM7l6QAAABO1BMVEVHcEwAAABoQBqkcBqSXBGfaBGIUw52Sh6pchRxRBeveR2qbg+5p5FuQQ2baRFySB19SQyaaRjJtJFaMwt8Sg5mOxGZaBhxRh2TZhK4hiqucwrDkzy5hSyBWCqCVSX////8/f3s8PPf08X+/v/DomfLu53Nqmrdz7b79ujz9Pbn5+fx6NmhoaHHuKbNvaXu7u7Q0dH48uLd3d3069ysknLhzq+YmJjt0qHcyrD+y1r+vVDY2NjHxcPi4+Oxl3W+q5DFsJO1lmWmiWXAonG4nHHNzc3V1dWxsbH/2GT4r0u/v7/Wxa779uvr28Du5tmtj2W/nGLy47D733T7+O/8+/j48M6srKzo1LC3t7f43YTWx7PKpWLVuITe0bv51Wjo0K3syJ3ruXP4ymbhxpLzv2f37tjIrHqeflrQwKXcKNlbAAAAH3RSTlMAAaOYaW1hjXV+jV3+bh+YV6L+GGMipJUPm0Xe4+Lf7dZ8OwAAAWZJREFUKM+901lXgkAYgGErNcXSzKW9ocZSkATBrRB3zT0XJNdsr///CxplUczbei84nHnOB8MBDIb/aQO1ZvnQsjXP6fU6nfMzDLPYNT72ha5W+8Q0tu0n876VWqeYXeP8uDHx65uMLQv2D0fXK41OjuR5WyZf8zXq4XBAV/3NNGdjpvDd4gSeFQiw3KN8eWO6EGo1BbLK8DhahQQrymzSOMsRVJIVaJpMMlKfJugSS0x1XGXJ+z4Vi1ExSpLQgYnKbE6nQtkgJEmSF5hSVSoV+WKyyBA6BmB2YwBJWt1a1CjzTuTmIaisQRys8J7MuBoAYrgXgCCxxE14oUSAbrvTGfRUdiPONRfTsP1ULpcH3YRZno7kEC+mxfgt6vVDYZfjXDeNx+9Q7+GhW3ln1tSXPE3A2Za5l0qlEsdruwp7HGdNAFHKI3HT54YINEbzmctfpRbssW6jDhybS1ld679mtb/+c34AUBhYzLcT6lgAAAAASUVORK5CYII='> |
| 21 | + <meta name=viewport content='width=device-width, initial-scale=1'> |
| 22 | + |
| 23 | + <script type='application/ld+json'> |
| 24 | + { |
| 25 | + "@context" : "https://schema.org", |
| 26 | + "@type" : "SoftwareApplication", |
| 27 | + "name" : "Create Certificate Chain", |
| 28 | + "url" : "https://ext-code.com/utils/x509/certificate-info/certificate-info.html", |
| 29 | + "author" : {"@type":"Person","name":"Matthew Richards"}, |
| 30 | + "description" : "create a chain of x509 certificates", |
| 31 | + "applicationCategory" : "DeveloperApplication", |
| 32 | + "operatingSystem" : "All", |
| 33 | + "browserRequirements" : "Requires JavaScript-enabled browser", |
| 34 | + "softwareVersion" : "1.0.0", |
| 35 | + "offers" : {"@type":"Offer","price":"0","priceCurrency":"GBP"} |
| 36 | + } |
| 37 | + </script> |
| 38 | + |
| 39 | + |
| 40 | + <script src='https://libs.ext-code.com/js/dom/component/component.js'></script> |
| 41 | + |
14 | 42 | <script init> |
| 43 | + console.clear(); |
| 44 | + console.log('create-certificate-chain.html'); |
| 45 | + console.log(); |
| 46 | + console.json=v=>console.log(JSON.stringify(v,null,4)); |
| 47 | + var df=true,did='html' |
| 48 | + ; |
| 49 | + |
| 50 | + var ext; |
| 51 | + var $; |
| 52 | + var datatype; |
| 53 | + var menumod; |
| 54 | + var keydown; |
| 55 | + |
| 56 | + var hdr; |
| 57 | + |
| 58 | + |
| 59 | + //: |
| 60 | + |
| 61 | + |
| 62 | + async function init(){ |
| 63 | + |
| 64 | + |
| 65 | + await load(); |
| 66 | + |
| 67 | + |
| 68 | + menu = menumod(); |
| 69 | + |
| 70 | + hdr = mod['x509-hdr']; |
| 71 | + |
| 72 | + |
| 73 | + hdr.initmod({ext,$,menu}); |
| 74 | + |
| 75 | + await Promise.all([ |
| 76 | + hdr.init(), |
| 77 | + ]); |
| 78 | + |
| 79 | + |
| 80 | + |
| 81 | + initdom(document.body); |
| 82 | + |
| 83 | + |
| 84 | + }//init |
| 85 | + |
| 86 | + |
| 87 | +(async()=>{ |
| 88 | + |
| 89 | + mod.stack.add; |
| 90 | + |
| 91 | + ({ext} = await import('https://libs.ext-code.com/js/io/ext-loader/ext-loader.m.js')); |
| 92 | + |
| 93 | + var promise = ext.load.libs( |
| 94 | + 'js/dom/$.js', |
| 95 | + 'js/core/datatype.js', |
| 96 | + 'js/dom/menumod/menumod.js', |
| 97 | + 'js/dom/keydown/keydown.js', |
| 98 | + ); |
| 99 | + [$,datatype,menumod,keydown] = await promise; |
| 100 | + |
| 101 | + mod.stack.complete; |
| 102 | + |
| 103 | +})(); |
| 104 | + |
| 105 | + |
| 106 | + async function load(){ |
| 107 | + |
| 108 | + var txt = localStorage['node-forge']; |
| 109 | + if(!txt){ |
| 110 | + var url = 'https://cdn.jsdelivr.net/npm/node-forge/+esm'; |
| 111 | + //console.log(url); |
| 112 | + var res = await fetch(url); |
| 113 | + txt = await res.text(); |
| 114 | + localStorage['node-forge'] = txt; |
| 115 | + } |
| 116 | + var blob = new Blob([txt],{type:'text/javascript'}); |
| 117 | + var url = window.URL.createObjectURL(blob); |
| 118 | + var nodeforge = await import(url); |
| 119 | + pki = nodeforge.default.pki; |
| 120 | + |
| 121 | + }//load |
| 122 | + |
| 123 | + |
15 | 124 |
|
16 | 125 | </script> |
17 | 126 |
|
|
44 | 153 | {} |
45 | 154 | pre |
46 | 155 | {flex:1;border:1px solid lightgray;padding:10px} |
| 156 | + |
| 157 | + |
| 158 | + .visually-hidden |
| 159 | + {position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important; |
| 160 | + clip:rect(0 0 0 0) !important;white-space:nowrap !important;border:0 !important} |
| 161 | + |
47 | 162 |
|
48 | 163 | </style> |
49 | 164 |
|
50 | 165 | </head> |
51 | 166 |
|
52 | 167 | <body> |
53 | 168 |
|
54 | | - |
| 169 | + <x509-hdr component=grp> |
| 170 | + <h1 class=visually-hidden> |
| 171 | + create certificate chain |
| 172 | + </h1> |
| 173 | + <img class=title src='images/generate-certificate-chain.png' style='top:5px;height:55px'> |
| 174 | + <time slot=date datetime=2025-11-15> |
| 175 | + 15 Nov 2025 |
| 176 | + </time> |
| 177 | + </x509-hdr> |
| 178 | + |
| 179 | + |
| 180 | +<!-- |
55 | 181 | <div class=hdr> |
56 | 182 | <a class=hdr-icon href='https://javascript-2020.github.io/'> |
57 | 183 | <img class=hdr-icon-img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAMAAAAM7l6QAAAAqFBMVEVHcEwjmpckopg9f3YxpJM6r5kjq58Nmp0Nn6QRoKExrpshnpgtoJUdoZwYnZ02spwYpaEmrZ8djpINn6Qtrp4inpcjqZ8SoqM3s5w0sp01spwrr58vr50oqpwdnpo0sZwtrJwUpKMMoaUtq50op5ssqpopppseqaM1sJwgpJ0NoaUSoaI3kYobqaMSpKQrr58PoaMVpaIOoKMLpKcXpaEkqp8Rm58YrKUL0CR4AAAAOHRSTlMACBkBCyinK59CQhUOLyKjqbUGpZgSYn6rp5WsekcmgkyWmCkmNB7AYTiuVgKuuo91i2PLn2lJ7kISMf4AAAElSURBVCjPrdPXloIwEAbgBDFKCRo6SO8lYEHd93+zxV7Zm2WuSL6Tk/MPEwBGLFH8SzFCeFiDXNeJ+7GtGds1D+ghDzzPzXX6xlJbq75s5KVLiJsSB76xIhd22Mz0pkyRnqzW2htD/SeUjL0EQKY60nqRvTLXGl64PR/SfDVxVvETZ123w8vN9Ur5YKUF4R9cd/WxqiePgCs3IMF1QXcVt6vK59tSqyjN4hwQbhS8mUuvWTLbwYtTQGhEjLHVPprv+4ztQ8AeRVn50uipBcXg/IPgfPaFF+z1axyeMEkcJwwdYHHZINQ02gALS49lJcQMci/COGzdue8apRQwNz4tYvM207JSRVEUhvtW6KeBIFVVbds07xPncZfCfWSK+UtNJ/9+VL/nTBuX7xjDZwAAAABJRU5ErkJggg==' /> |
|
70 | 196 | 24 Apr 2025 |
71 | 197 | </div> |
72 | 198 | </div hdr> |
| 199 | +--> |
| 200 | + |
| 201 | + |
73 | 202 |
|
74 | 203 | <div id=btns> |
75 | 204 | <input id=clear value=clear type=button> |
|
83 | 212 | <pre id=view> |
84 | 213 | </pre> |
85 | 214 |
|
| 215 | + |
| 216 | + <log-mod component></log-mod> |
| 217 | + |
86 | 218 | </body> |
87 | 219 |
|
88 | 220 |
|
89 | 221 | <script> |
90 | | - console.clear(); |
91 | | - console.log('generate-certificate-chain'); |
92 | | - console.log(); |
93 | | - console.json=v=>console.log(JSON.stringify(v,null,4)); |
94 | | - var ext; |
95 | | - var $,datatype,menumod,keydown; |
96 | | - |
97 | | - var mod = {}; |
98 | | - |
| 222 | + |
| 223 | + |
99 | 224 | var chain; |
100 | 225 | var view |
101 | 226 | var list = []; |
|
105 | 230 | var btn = {}; |
106 | 231 |
|
107 | 232 |
|
108 | | - // |
| 233 | + //: |
109 | 234 |
|
110 | 235 |
|
111 | | - window.onload = init; |
112 | | - |
113 | | - async function init(){ |
114 | | - |
115 | | - await load(); |
116 | | - initdom(); |
117 | | - |
118 | | - }//init |
119 | | - |
120 | | - |
121 | | - async function load(){ |
122 | | - |
123 | | - var res = await fetch('https://raw.githubusercontent.com/javascript-2020/ext-code/main/ext-loader.js') |
124 | | - var txt = await res.text(); |
125 | | - ext = eval(txt); |
126 | | - [$,datatype,menumod,keydown] = await ext.load.libs( |
127 | | - 'js/dom/$.js', |
128 | | - 'js/core/datatype.js', |
129 | | - 'js/dom/menumod/menumod.js', |
130 | | - 'js/dom/keydown/keydown.js' |
131 | | - ); |
132 | | - |
133 | | - }//load |
134 | | - |
135 | | - |
136 | | - load.nodeforge = async function(){ |
137 | | - |
138 | | - var txt = localStorage['node-forge']; |
139 | | - if(!txt){ |
140 | | - var url = 'https://cdn.jsdelivr.net/npm/node-forge/+esm'; |
141 | | - //console.log(url); |
142 | | - var res = await fetch(url); |
143 | | - txt = await res.text(); |
144 | | - localStorage['node-forge'] = txt; |
145 | | - } |
146 | | - var blob = new Blob([txt],{type:'text/javascript'}); |
147 | | - var url = window.URL.createObjectURL(blob); |
148 | | - var nodeforge = await import(url); |
149 | | - pki = nodeforge.default.pki; |
150 | | - |
151 | | - }//nodeforge |
152 | | - |
153 | | - |
154 | 236 | function initdom(){ |
155 | 237 |
|
156 | 238 |
|
|
170 | 252 |
|
171 | 253 | }//initdom |
172 | 254 |
|
173 | | - |
| 255 | + |
| 256 | + //: |
| 257 | + |
| 258 | + |
174 | 259 | btn.clear = function(){ |
175 | 260 |
|
176 | 261 | list = []; |
|
0 commit comments