@@ -48,15 +48,6 @@ var CAextensions = [{
4848 sslCA : true ,
4949 emailCA : true ,
5050 objCA : true
51- } , {
52- name : 'subjectAltName' ,
53- altNames : [ {
54- type : 6 , // URI
55- value : 'http://example.org/webid#me'
56- } , {
57- type : 7 , // IP
58- ip : '127.0.0.1'
59- } ]
6051} , {
6152 name : 'subjectKeyIdentifier'
6253} ] ;
@@ -127,7 +118,6 @@ var CA = function (caFolder) {
127118 } catch ( e ) {
128119 this . generateCA ( ) ;
129120 }
130- this . currentlyGenerating = { } ;
131121} ;
132122
133123CA . prototype . randomSerialNumber = function ( ) {
@@ -169,7 +159,9 @@ CA.prototype.loadCA = function () {
169159 } ;
170160} ;
171161
172- CA . prototype . generateServerCertificateKeys = function ( hostname , cb ) {
162+ CA . prototype . generateServerCertificateKeys = function ( hosts , cb ) {
163+ if ( typeof ( hosts ) === "string" ) hosts = [ hosts ] ;
164+ var mainHost = hosts [ 0 ] ;
173165 var keysServer = pki . rsa . generateKeyPair ( 1024 ) ;
174166 var certServer = pki . createCertificate ( ) ;
175167 certServer . publicKey = keysServer . publicKey ;
@@ -180,52 +172,26 @@ CA.prototype.generateServerCertificateKeys = function (hostname, cb) {
180172 var attrsServer = ServerAttrs . slice ( 0 ) ;
181173 attrsServer . unshift ( {
182174 name : 'commonName' ,
183- value : hostname
175+ value : mainHost
184176 } )
185177 certServer . setSubject ( attrsServer ) ;
186178 certServer . setIssuer ( this . CAcert . issuer . attributes ) ;
187- certServer . setExtensions ( ServerExtensions ) ;
179+ certServer . setExtensions ( ServerExtensions . concat ( [ {
180+ name : 'subjectAltName' ,
181+ altNames : hosts . map ( function ( host ) {
182+ return { type : 2 , value : host } ;
183+ } )
184+ } ] ) ) ;
188185 certServer . sign ( this . CAkeys . privateKey , Forge . md . sha256 . create ( ) ) ;
189186 var certPem = pki . certificateToPem ( certServer ) ;
190187 var keyPrivatePem = pki . privateKeyToPem ( keysServer . privateKey )
191188 var keyPublicPem = pki . publicKeyToPem ( keysServer . publicKey )
192- FS . writeFile ( this . certsFolder + '/' + hostname + '.pem' , certPem ) ;
193- FS . writeFile ( this . keysFolder + '/' + hostname + '.key' , keyPrivatePem ) ;
194- FS . writeFile ( this . keysFolder + '/' + hostname + '.public.key' , keyPublicPem ) ;
189+ FS . writeFile ( this . certsFolder + '/' + mainHost . replace ( / \* / g , '_' ) + '.pem' , certPem ) ;
190+ FS . writeFile ( this . keysFolder + '/' + mainHost . replace ( / \* / g , '_' ) + '.key' , keyPrivatePem ) ;
191+ FS . writeFile ( this . keysFolder + '/' + mainHost . replace ( / \* / g , '_' ) + '.public.key' , keyPublicPem ) ;
195192 cb ( certPem , keyPrivatePem ) ;
196193} ;
197194
198- CA . prototype . getServerCertificateKeys = function ( hostname , cb ) {
199- if ( this . currentlyGenerating . hasOwnProperty ( hostname ) ) {
200- this . currentlyGenerating [ hostname ] . push ( cb ) ;
201- } else {
202- this . currentlyGenerating [ hostname ] = [ cb ] ;
203- FS . stat ( this . certsFolder + '/' + hostname + '.pem' , function ( err , stat ) {
204- if ( typeof err !== 'undefined' ) {
205- this . generateServerCertificateKeys ( hostname , function ( cert , key ) {
206- // possible race condition here...
207- var tmp = this . currentlyGenerating [ hostname ] ;
208- tmp . forEach ( function ( c ) {
209- c ( cert , key ) ;
210- } ) ;
211- delete this . currentlyGenerating [ hostname ] ;
212- } . bind ( this ) ) ;
213- } else {
214- FS . readFile ( this . certsFolder + '/' + hostname + '.pem' , function ( err , dataCert ) {
215- FS . readFile ( this . keysFolder + '/' + hostname + '.key' , function ( err , dataKey ) {
216- // possible race condition here...
217- var tmp = this . currentlyGenerating [ hostname ] ;
218- tmp . forEach ( function ( c ) {
219- c ( dataCert , dataKey ) ;
220- } ) ;
221- delete this . currentlyGenerating [ hostname ] ;
222- } . bind ( this ) ) ;
223- } . bind ( this ) ) ;
224- }
225- } . bind ( this ) ) ;
226- }
227- } ;
228-
229195CA . prototype . getCACertPath = function ( ) {
230196 return this . certsFolder + '/ca.pem' ;
231197} ;
0 commit comments