2016-02-29 14 views
6

Tôi muốn ký và mã hóa thư của mình.Ký và mã hóa thư

Phiên bản lạc đà hiện tại của tôi là 2.13.0.

Có tính năng lạc đà mà tôi có thể sử dụng cho mục đích này không?

Nội dung là văn bản thuần túy do đó không thể sử dụng XMLDSig.

Dự kiến ​​kết quả phải là một mail với các tiêu đề:

  • Content-Type: application/PKCS7-kịch câm; name = "smime.p7m"; smime-type = bao bọc dữ liệu
  • Content-Transfer-Encoding: base64
+0

Tôi không thể nói về phần ký hiệu và mã hóa nhưng đối với e-mail bạn có thể sử dụng http://camel.apache.org/mail.html. Tôi đoán vì tin nhắn được coi là văn bản thuần túy, bạn có thể sử dụng bất kỳ thư viện mã hóa và dấu hiệu nào bạn muốn và đặt loại nội dung và mã hóa. –

+0

Tôi hiện sử dụng thành phần thư lạc đà chuẩn. Tôi tin rằng tôi phải tạo một javax.mail.internet.MimeMessage với nội dung và tệp đính kèm được lưu trữ dưới dạng javax.mail.Multipart. MimeMessage này có thể được ký và mã hóa. Khi tôi thêm toàn bộ MimeMessage làm cơ thể từ trao đổi và gửi nó với smtp nó hy vọng sẽ làm việc. – lahu89

+0

Có một thành phần Camel dành riêng cho chữ ký số của Crypto: http://camel.apache.org/crypto-digital-signatures.html. Và một liên kết khác cho tất cả các mối quan tâm về bảo mật trong Camel http://camel.apache.org/security.html –

Trả lời

0

Tôi không phải là một người sử dụng Camel, nhưng tôi đã tò mò và chơi đùa với nó. Những gì bạn muốn là ký và mã hóa S/MIME. Điều này hiện không khả dụng, nhưng có ticket cho nó không bao giờ có bất kỳ phản hồi nào kể từ khi được tạo vào tháng 2 năm 2015. Camel có định dạng dữ liệu MIME-Multipart, mã hóa PGP (nhưng chỉ đối xứng), Ký/Xác minh (không mã hóa) - nhưng tôi không thấy cách nào để kết hợp chúng để thực sự có được một phong bì S/MIME hợp lệ cho một e-mail được mã hóa + đã ký. Bên cạnh đó, PGP không phải là S/MIME và ngược lại.

Tôi biết cách soạn và gửi e-mail như vậy qua thư viện JavaMail + BouncyCastle, tôi thậm chí còn có mã mẫu cho nó. Về mặt lý thuyết, bạn có thể tạo thông điệp MIME qua JavaMail + BouncyCastle và sau đó sử dụng Camel để gửi hoặc tạo điểm cuối hoặc định dạng dữ liệu S/MIME của riêng bạn (ít nhất một cách để marshalling và bỏ unmarshalling nếu bạn không cần nó). Nhưng tôi không tìm được cách để làm điều đó.


Cập nhật:

Thậm chí nếu tôi đặt một ký & mã hóa phần MIME cấu hình sẵn trên thiết bị đầu cuối đầu vào và thực hiện điều này ...

.setHeader("From", simple("[email protected]")) 
.setHeader("To", simple("[email protected]")) 
.setHeader("Subject", simple("Signed & encrypted")) 
.setHeader("Content-Type", simple("application/pkcs7-mime; name=\"smime.p7m\"; smime-type=enveloped-data")) 
.setHeader("Content-Transfer-Encoding", simple("base64")) 

... và qua đường bưu điện là khách hàng gửi thư, như Thunderbird không thể thực sự làm phiền thư vì điểm kết thúc thư Camel ghi đè số Content-Transfer-Encoding bằng giá trị 7bit. Có another ticket cho vấn đề này, nhưng cũng chưa được giải quyết kể từ tháng 6 năm 2014. Vì vậy, trong thời gian này bạn thậm chí không thể sử dụng điểm cuối thư để gửi thư sau khi bạn đã xây dựng nó thông qua JavaMail và BouncyCastle. Bạn thậm chí phải gửi nó một mình (cũng rất đơn giản thông qua JM + BC, nhưng gây phiền nhiễu). Vì vậy, hiện tại bạn không thể thực sự sử dụng cơ sở hạ tầng Camel vì các thiết bị đầu cuối và định dạng dữ liệu không phù hợp với thành phần tin nhắn S/MIME.

+0

Tôi chấp nhận câu trả lời của bạn vì bạn đã chỉ ra rằng việc ký và mã hóa không có sẵn trong lạc đà. Tôi đã mô tả giải pháp của mình theo một câu trả lời riêng. – lahu89

1

Tôi đã giải quyết được sự cố khi gửi.

Tôi tạo ra một MimeMessage mới với tất cả các thông số cần thiết như từ, nhận, đề và nội dung (dung nhiều với cơ thể và file đính kèm).

Với BouncyCastle I signedencrypted MimeMessage này.

Tôi đặt MimeMessage thành cơ thể và gửi nó với điểm cuối thư lạc đà chuẩn. Tất cả các thông số bắt buộc sẽ được chọn từ chính MimeMessage chứ không phải từ các tiêu đề trao đổi.

Để nhận được tôi sẽ sử dụng cũng chuẩn email lạc đà nhưng với tham số mapMailMessage = false mà tôi có thể xử lý được javax.mail.Message bản thân mà không cần tiền xử lý. Để giải mã, tôi cũng sẽ sử dụng BouncyCastle.

+0

Vì vậy, về cơ bản bạn chỉ cần làm những gì tôi mô tả trong câu trả lời của tôi. Tôi vui vì tôi có thể giúp. Nhưng một câu hỏi ngược lại: Nếu bạn gửi tin nhắn như được mô tả, bạn có thể đọc nó với các ứng dụng thư tiêu chuẩn như Thunderbird hoặc Outlook hoặc Lotus Notes không? Nếu bạn chỉ có thể đọc chúng với giải pháp Camel homebrew của riêng bạn, IMO chúng không đáng giá trong thế giới thực của e-mail. – kriegaex

+0

Có, tôi có thể đọc chúng bằng Outlook và Gmail mà không gặp sự cố. Tôi cũng đã gửi thư đã ký mà không cần mã hóa và chúng cũng hợp lệ. Mục tiêu của tôi là tạo các thư được mã hóa và có chữ ký hợp lệ nếu không nó sẽ vô dụng đối với tôi. Việc ký và mã hóa được thực hiện từ BouncyCastle tùy thuộc vào RFC do đó nó phải được chấp nhận từ mọi ứng dụng thư khách. – lahu89

+0

Rất thú vị. Bạn có phiền khi đăng một đoạn mã nhỏ về cách bạn đã làm nó? Tôi thích học hỏi từ bạn, tit cho tat. :-) Tôi muốn thử nó trong ví dụ của riêng tôi và thay thế một phần gửi maual. Cảm ơn trước. – kriegaex