@@ -286,6 +286,7 @@ function createCSR (options, callback) {
286
286
* can be used as with createCSR.
287
287
* @static
288
288
* @param {Object } [options] Optional options object
289
+ * @param {String } [options.serviceCertificate] PEM encoded certificate
289
290
* @param {String } [options.serviceKey] Private key for signing the certificate, if not defined a new one is generated
290
291
* @param {String } [options.serviceKeyPassword] Password of the service key
291
292
* @param {Boolean } [options.selfSigned] If set to true and serviceKey is not defined, use clientKey for signing
@@ -499,9 +500,11 @@ function readCertificateInfo (certificate, callback) {
499
500
'-in' ,
500
501
'--TMPFILE--'
501
502
]
502
- openssl . spawnWrapper ( params , certificate , function ( err , code , stdout ) {
503
+ openssl . spawnWrapper ( params , certificate , function ( err , code , stdout , stderr ) {
503
504
if ( err ) {
504
505
return callback ( err )
506
+ } else if ( stderr ) {
507
+ return callback ( stderr )
505
508
}
506
509
return fetchCertificateData ( stdout , callback )
507
510
} )
@@ -555,7 +558,7 @@ function getModulus (certificate, password, hash, callback) {
555
558
helper . createPasswordFile ( { 'cipher' : '' , 'password' : password , 'passType' : 'in' } , params , delTempPWFiles [ delTempPWFiles . length ] )
556
559
}
557
560
558
- openssl . spawnWrapper ( params , certificate , function ( sslErr , code , stdout ) {
561
+ openssl . spawnWrapper ( params , certificate , function ( sslErr , code , stdout , stderr ) {
559
562
function done ( err ) {
560
563
if ( err ) {
561
564
return callback ( err )
@@ -570,7 +573,7 @@ function getModulus (certificate, password, hash, callback) {
570
573
}
571
574
}
572
575
helper . deleteTempFiles ( delTempPWFiles , function ( fsErr ) {
573
- done ( sslErr || fsErr )
576
+ done ( sslErr || fsErr || stderr )
574
577
} )
575
578
} )
576
579
}
@@ -591,9 +594,11 @@ function getDhparamInfo (dh, callback) {
591
594
'--TMPFILE--'
592
595
]
593
596
594
- openssl . spawnWrapper ( params , dh , function ( err , code , stdout ) {
597
+ openssl . spawnWrapper ( params , dh , function ( err , code , stdout , stderr ) {
595
598
if ( err ) {
596
599
return callback ( err )
600
+ } else if ( stderr ) {
601
+ return callback ( stderr )
597
602
}
598
603
599
604
var result = { }
@@ -656,9 +661,11 @@ function getFingerprint (certificate, hash, callback) {
656
661
'-' + hash
657
662
]
658
663
659
- openssl . spawnWrapper ( params , certificate , function ( err , code , stdout ) {
664
+ openssl . spawnWrapper ( params , certificate , function ( err , code , stdout , stderr ) {
660
665
if ( err ) {
661
666
return callback ( err )
667
+ } else if ( stderr ) {
668
+ return callback ( stderr )
662
669
}
663
670
var match = stdout . match ( / F i n g e r p r i n t = ( [ 0 - 9 a - f A - F : ] + ) $ / m)
664
671
if ( match ) {
@@ -825,9 +832,9 @@ function checkCertificate (certificate, passphrase, callback) {
825
832
helper . createPasswordFile ( { 'cipher' : '' , 'password' : passphrase , 'passType' : 'in' } , params , delTempPWFiles [ delTempPWFiles . length ] )
826
833
}
827
834
828
- openssl . spawnWrapper ( params , certificate , function ( sslErr , code , stdout ) {
835
+ openssl . spawnWrapper ( params , certificate , function ( sslErr , code , stdout , stderr ) {
829
836
function done ( err ) {
830
- if ( err ) {
837
+ if ( err && err . trim ( ) !== 'verify OK' ) {
831
838
return callback ( err )
832
839
}
833
840
var result
@@ -843,7 +850,7 @@ function checkCertificate (certificate, passphrase, callback) {
843
850
callback ( null , result )
844
851
}
845
852
helper . deleteTempFiles ( delTempPWFiles , function ( fsErr ) {
846
- done ( sslErr || fsErr )
853
+ done ( sslErr || fsErr || stderr )
847
854
} )
848
855
} )
849
856
}
@@ -925,7 +932,7 @@ function verifySigningChain (certificate, ca, callback) {
925
932
// certificate incl. intermediate certificates
926
933
params . push ( '--TMPFILE--' )
927
934
928
- openssl . spawnWrapper ( params , files , function ( err , code , stdout ) {
935
+ openssl . spawnWrapper ( params , files , function ( err , code , stdout , stderr ) {
929
936
if ( err ) {
930
937
return callback ( err )
931
938
}
@@ -945,13 +952,23 @@ function fetchCertificateData (certData, callback) {
945
952
var validity = { }
946
953
var san
947
954
955
+ var ky , i
956
+
948
957
// serial
949
958
if ( ( serial = certData . match ( / \s * S e r i a l N u m b e r : \r ? \n ? \s * ( [ ^ \r \n ] * ) \r ? \n \s * \b / ) ) && serial . length > 1 ) {
950
959
certValues . serial = serial [ 1 ]
951
960
}
952
961
953
- if ( ( subject = certData . match ( / \s * S u b j e c t : \r ? \n ( \s * ( ( C | L | O | O U | S T | C N | D C | e m a i l A d d r e s s ) \s = \s [ ^ \r \n ] + \r ? \n ) ) * \s * \b / ) ) && subject . length > 1 ) {
962
+ if ( ( subject = certData . match ( / \s * S u b j e c t : \r ? \n ( \s * ( ( [ a - z A - Z 0 - 9 . ] + ) \s = \s [ ^ \r \n ] + \r ? \n ) ) * \s * \b / ) ) && subject . length > 1 ) {
954
963
subject = subject [ 0 ]
964
+ tmp = matchAll ( subject , / \s ( [ a - z A - Z 0 - 9 . ] + ) \s = \s ( [ ^ \r \n ] .* ) / g)
965
+ for ( i = 0 ; i < tmp . length ; i ++ ) {
966
+ ky = tmp [ i ] [ 1 ] . toString ( )
967
+ if ( ky . match ( '(C|ST|L|O|OU|CN|emailAddress|DC)' ) ) {
968
+ continue
969
+ }
970
+ certValues [ ky ] = tmp [ i ] [ 2 ] . toString ( )
971
+ }
955
972
956
973
// country
957
974
tmp = subject . match ( / \s C \s = \s ( [ ^ \r \n ] .* ?) [ \r \n ] / )
@@ -1026,8 +1043,16 @@ function fetchCertificateData (certData, callback) {
1026
1043
} ) : tmp [ 0 ] [ 1 ] ) : ''
1027
1044
}
1028
1045
1029
- if ( ( issuer = certData . match ( / \s * I s s u e r : \r ? \n ( \s * ( C | L | O | O U | S T | C N | D C | e m a i l A d d r e s s ) \s = \s [ ^ \r \n ] .* \r ? \n ) * \s * \b / ) ) && issuer . length > 1 ) {
1046
+ if ( ( issuer = certData . match ( / \s * I s s u e r : \r ? \n ( \s * ( [ a - z A - Z 0 - 9 . ] + ) \s = \s [ ^ \r \n ] .* \r ? \n ) * \s * \b / ) ) && issuer . length > 1 ) {
1030
1047
issuer = issuer [ 0 ]
1048
+ tmp = matchAll ( issuer , / \s ( [ a - z A - Z 0 - 9 . ] + ) \s = \s ( [ ^ \r \n ] .* ) / g)
1049
+ for ( i = 0 ; i < tmp . length ; i ++ ) {
1050
+ ky = tmp [ i ] [ 1 ] . toString ( )
1051
+ if ( ky . match ( '(C|ST|L|O|OU|CN|emailAddress|DC)' ) ) {
1052
+ continue
1053
+ }
1054
+ certValues . issuer [ ky ] = tmp [ i ] [ 2 ] . toString ( )
1055
+ }
1031
1056
1032
1057
// country
1033
1058
tmp = issuer . match ( / \s C \s = \s ( [ ^ \r \n ] .* ?) [ \r \n ] / )
0 commit comments