@@ -209,6 +209,7 @@ else if (id.equals("2.5.29.37")) { // extendedKeyUsage
209209 }
210210 }
211211 catch (IOException e ) {
212+ OpenSSL .debugStackTrace (e );
212213 throw newExtensionError (runtime , "Unable to create extension: " + e .getMessage ());
213214 }
214215 return newExtension (runtime , objectId , value , critical .isNil () ? null : critical .isTrue ());
@@ -518,8 +519,19 @@ private static ASN1Encodable parseSubjectAltName(final String valuex) throws IOE
518519 return new GeneralName (GeneralName .registeredID , rid );
519520 }
520521 if ( valuex .startsWith (email_ ) ) {
521- final String mail = valuex .substring (email_ .length ());
522- return new GeneralName (GeneralName .rfc822Name , mail );
522+ final String [] vals = valuex .split ("," );
523+ final GeneralName [] names = new GeneralName [vals .length ];
524+ for ( int i = 0 ; i < vals .length ; i ++ ) {
525+ if (vals [i ].startsWith (email_ )) {
526+ String mail = vals [i ].substring (email_ .length ());
527+ names [i ] = new GeneralName (GeneralName .rfc822Name , mail );
528+ }
529+ else {
530+ ASN1Encodable name = parseSubjectAltName (vals [i ]);
531+ names [i ] = name instanceof GeneralNames ? ((GeneralNames ) name ).getNames ()[0 ] : (GeneralName ) name ;
532+ }
533+ }
534+ return new GeneralNames (names );
523535 }
524536 if ( valuex .startsWith ("IP:" ) || valuex .startsWith ("IP Address:" ) ) {
525537 final int idx = valuex .charAt (2 ) == ':' ? 3 : 11 ;
0 commit comments