Changeset 5152 for branches/2.3/security
- Timestamp:
- 11/04/11 16:50:31 (12 years ago)
- Location:
- branches/2.3/security
- Files:
-
- 2 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.3/security/ExpressoCert/src/br/gov/serpro/cert/DigitalCertificate.java
r5024 r5152 31 31 import java.util.Properties; 32 32 33 import java.util.logging.Level; 34 import java.util.logging.Logger; 33 35 import javax.crypto.Cipher; 34 36 import javax.mail.Message; … … 55 57 import br.gov.serpro.ui.DialogBuilder; 56 58 import br.gov.serpro.util.Base64Utils; 59 import java.io.BufferedInputStream; 60 import java.io.BufferedReader; 61 import java.io.InputStreamReader; 57 62 import java.io.OutputStream; 58 63 import java.io.OutputStreamWriter; 64 import java.io.StringReader; 59 65 import java.security.AlgorithmParameters; 60 66 import java.security.cert.CertificateEncodingException; … … 65 71 import javax.activation.MailcapCommandMap; 66 72 import javax.mail.internet.ContentType; 73 import javax.mail.internet.HeaderTokenizer; 67 74 import javax.mail.internet.MimeUtility; 68 75 import javax.mail.internet.PreencodedMimeBodyPart; … … 337 344 } 338 345 346 static public String verifyP7S(MimeMessage body){ 347 try { 348 349 MimeMultipart mm = (MimeMultipart) body.getContent(); 350 externalLoop:for (int i = mm.getCount() - 1; i >= 0 ; i--){ 351 MimeBodyPart mbp = (MimeBodyPart) mm.getBodyPart(i); 352 if (mbp.getContentType().contains("application/pkcs7-signature")){ 353 String[] contentTypeArray = body.getHeader("Content-Type"); 354 HeaderTokenizer hTokenizer = new HeaderTokenizer(contentTypeArray[0]); 355 356 String boundary = ""; 357 HeaderTokenizer.Token t = hTokenizer.next(); 358 for (; t.getType() != HeaderTokenizer.Token.EOF; t = hTokenizer.next()){ 359 if (t.getType() == HeaderTokenizer.Token.ATOM && t.getValue().equalsIgnoreCase("boundary=")){ 360 break; 361 } 362 } 363 t = hTokenizer.next(); 364 if (t.getType() == HeaderTokenizer.Token.QUOTEDSTRING){ 365 boundary = t.getValue(); 366 } 367 368 InputStreamReader rawStreamReader = new InputStreamReader(mbp.getRawInputStream(), "iso-8859-1"); 369 370 StringBuilder signature = new StringBuilder(256); 371 while (rawStreamReader.ready()){ 372 char[] buffer = new char[256]; 373 rawStreamReader.read(buffer); 374 signature.append(buffer); 375 } 376 377 String[] array = signature.toString().split("\\r\\n|(?<!\\r)\\n"); 378 379 boolean badFormat = false; 380 for (int j = 0; j < array.length; j++){ 381 if (array[j].length() > array[0].length()){ 382 badFormat = true; 383 break; 384 } 385 } 386 387 signature = null; 388 array = null; 389 390 if (badFormat){ 391 BufferedInputStream parsedIS = new BufferedInputStream(mbp.getInputStream()); 392 ByteArrayOutputStream baos = new ByteArrayOutputStream(parsedIS.available()); 393 394 while (parsedIS.available() > 0){ 395 byte[] buffer = new byte[parsedIS.available()]; 396 parsedIS.read(buffer); 397 baos.write(buffer); 398 } 399 400 Enumeration headers = headers = mbp.getAllHeaderLines(); 401 String headersString = ""; 402 while (headers.hasMoreElements()){ 403 String header = (String) headers.nextElement(); 404 System.out.println("header: "+header); 405 headersString += header+"\r\n"; 406 } 407 408 String base64Encoded = Base64Utils.der2pem(baos.toByteArray(), false); 409 410 mm.removeBodyPart(i); 411 body.saveChanges(); 412 413 ByteArrayOutputStream oStream = new ByteArrayOutputStream(); 414 415 oStream = new ByteArrayOutputStream(); 416 body.writeTo(oStream); 417 418 BufferedReader reader = new BufferedReader(new StringReader(oStream.toString())); 419 OutputStream os = new ByteArrayOutputStream(); 420 421 String line = ""; 422 while ((line = reader.readLine()) != null ){ 423 if (!line.equals("--"+boundary+"--")){ 424 os.write((line+"\r\n").getBytes("iso-8859-1")); 425 } 426 } 427 428 return os.toString() 429 +"--"+boundary+"\r\n"+headersString 430 +"\r\n"+base64Encoded 431 +"--"+boundary+"--\r\n"; 432 433 } 434 435 break externalLoop; 436 } 437 } 438 439 } catch (IOException ex) { 440 Logger.getLogger(DigitalCertificate.class.getName()).log(Level.SEVERE, null, ex); 441 } catch (MessagingException ex) { 442 Logger.getLogger(DigitalCertificate.class.getName()).log(Level.SEVERE, null, ex); 443 } catch (ClassCastException ex) { 444 Logger.getLogger(DigitalCertificate.class.getName()).log(Level.SEVERE, null, ex); 445 } 446 447 return null; 448 } 449 339 450 /** 340 451 * Usado para assinar digitalmente um e-mail. … … 506 617 body.saveChanges(); 507 618 508 619 ByteArrayOutputStream oStream = new ByteArrayOutputStream(); 509 620 510 621 oStream = new ByteArrayOutputStream(); 511 body.writeTo(oStream); 512 513 body = null; 514 return oStream.toString("iso-8859-1"); 515 622 body.writeTo(oStream); 623 624 String verified = DigitalCertificate.verifyP7S(body); 625 body = null; 626 627 if (verified != null){ 628 return verified; 629 } else { 630 return oStream.toString("iso-8859-1"); 631 } 516 632 } 517 633 -
branches/2.3/security/ExpressoCert/src/br/gov/serpro/setup/Setup.java
r3394 r5152 45 45 for (String[] parameter : getParameterInfo()) { 46 46 String parameterName = parameter[0]; 47 String parameterValue ;47 String parameterValue = null; 48 48 49 parameterValue = this.currentApplet.getParameter(parameterName); 49 if (this.currentApplet != null){ 50 parameterValue = this.currentApplet.getParameter(parameterName); 51 } 50 52 51 53 System.out.println("parameter: "+parameterName+" value: "+parameterValue); … … 76 78 currentLocale = this.buildLocale(parameters.getProperty("locale")); 77 79 langResources = new HashMap<String, ResourceBundle>(2); 78 langResources.put("ExpressoCertMessages", ResourceBundle.getBundle(" ExpressoCertMessages", currentLocale));80 langResources.put("ExpressoCertMessages", ResourceBundle.getBundle("br.gov.serpro.i18n.ExpressoCertMessages", currentLocale)); 79 81 82 } 83 84 public boolean setParameter(String parameter, String value){ 85 86 if (parameter != null && value != null){ 87 88 if (parameter.equals("debug") || parameter.equals("token") || parameter.equals("locale")){ 89 this.parameters.setProperty(parameter, value); 90 return true; 91 } 92 } 93 94 return false; 80 95 } 81 96 -
branches/2.3/security/ExpressoCert/src/br/gov/serpro/util/Base64Utils.java
r1174 r5152 131 131 } 132 132 133 public static String der2pem(byte[] der){134 133 135 int begin = 0; 136 int lineSize = 64; 137 int end = lineSize; 134 public static String der2pem(byte[] der, boolean isCert){ 135 136 int begin = 0; 137 int lineSize = isCert ? 64 : 76; 138 int end = lineSize; 138 139 int bytesWriten = 0; 139 140 141 String CRLF = "\r\n"; 142 String base64encoded = Base64Utils.base64Encode(der); 143 StringBuilder sb = new StringBuilder(); 140 144 141 String LF = "\n"; 142 String beginCertificate = "-----BEGIN CERTIFICATE-----" +LF; 143 String endCertificate = "-----END CERTIFICATE-----"; 145 String beginCertificate = "-----BEGIN CERTIFICATE-----" +CRLF; 146 String endCertificate = "-----END CERTIFICATE-----"; 144 147 145 String base64encoded = Base64Utils.base64Encode(der); 146 147 StringBuilder sb = new StringBuilder(); 148 sb.append(beginCertificate); 149 148 if (isCert){ 149 sb.append(beginCertificate); 150 } 150 151 151 152 do { … … 156 157 157 158 String subs = base64encoded.substring(begin, end); 158 sb.append(subs + LF);159 sb.append(subs + CRLF); 159 160 bytesWriten += end - begin; 160 161 begin = end; … … 163 164 } while (bytesWriten != base64encoded.length()); 164 165 165 sb.append(endCertificate); 166 if (isCert){ 167 sb.append(endCertificate); 168 } 166 169 167 170 return sb.toString(); 168 171 172 } 169 173 174 public static String der2pem(byte[] der){ 175 return Base64Utils.der2pem(der, false); 170 176 } 171 177
Note: See TracChangeset
for help on using the changeset viewer.