GrapeCity Secure Mail for .NET 4.0J > メールプロトコルの概要 > S/MIMEによる署名と暗号化 |
S/MIMEによってメールメッセージの署名と暗号化を行うには、MailMessageクラスを使用します。
MailMessageクラスには、S/MIMEメッセージをエンコードおよびデコードするために3つのメソッドが用意されています。SecureSignメソッドは、送信者の電子メールアドレスに対して発行された証明書を使用してメッセージを署名します。SecureEncryptメソッドは、受信者の電子メールアドレスに対して発行された証明書を使用してメッセージを暗号化します。SecureDecodeメソッドは、署名および暗号化されたメッセージをデコードします。これら3つのメソッドにはすべて、パラメーターのないオーバーロードがあります。これらのオーバーロードは、適切な証明書ストアを自動的に検索して、一致する電子メール証明書を探します。
以下のコードは、各メソッドのパラメーターのあるオーバーロードの使用例を示します。送信するメールや受信したメールのMailMessageオブジェクトに対して、これらのプロシージャが利用できます。
サンプルコードの先頭にある名前空間の参照文(Visual BasicではImports、C#ではusing)は、ソースファイルの先頭に記述してください。 |
Visual Basic |
コードのコピー |
---|---|
Imports Dart.Mail Private Function getSignedMessage(ByVal message As MailMessage) As MailMessage ' 署名に使用する証明書をCURRENT USER/MYストアで検索します。 ' 以下のコードを実行すると、"message.SecureSign()"と同じ署名メッセージが得られます。 Dim myPersonalStore As New X509Store(StoreName.My, StoreLocation.CurrentUser) myPersonalStore.Open(OpenFlags.ReadOnly) For Each certificate As X509Certificate2 In myPersonalStore.Certificates If certificate.Subject.Contains("E=" & message.From) Then message.SecureSign(certificate, X509IncludeOption.ExcludeRoot, DigestAlgorithm.Sha1, True, False) Return message End If Next certificate Return Nothing End Function Private Function getEncryptedMessage(ByVal message As MailMessage) As MailMessage ' 暗号化に使用する証明書をCURRENT USER/ADDRESSBOOKストアで検索します。 ' 以下のコードを実行すると、"message.SecureEncrypt()"と同じ暗号化メッセージが得られます。 Dim encryptingCertificates As New X509Certificate2Collection() Dim addressBookStore As New X509Store(StoreName.AddressBook, StoreLocation.CurrentUser) addressBookStore.Open(OpenFlags.ReadOnly) For Each certificate As X509Certificate2 In addressBookStore.Certificates If certificate.Subject.Contains("E=" & message.To) Then encryptingCertificates.Add(certificate) message.SecureEncrypt(encryptingCertificates, EncryptingAlgorithm.TripleDes, False) Return message End If Next certificate Return Nothing End Function Private Function getDecodedMessage(ByVal message As MailMessage) As MailMessage ' 復号化に使用する証明書を、エクスポートされた証明書ファイルからロードします。 ' メッセージをデコードし、証明書をCURRENT USER/MYストアにインポートします。 Dim decryptingCertificate As New X509Certificate2(Application.StartupPath & "\myCertificate.pfx") message.SecureDecode(New X509Certificate2Collection(decryptingCertificate), True) Return message End Function |
C# |
コードのコピー |
---|---|
using Dart.Mail; private MailMessage getSignedMessage(MailMessage message) { // 署名に使用する証明書をCURRENT USER/MYストアで検索します。 // 以下のコードを実行すると、"message.SecureSign()"と同じ署名メッセージが得られます。 X509Store myPersonalStore = new X509Store(StoreName.My, StoreLocation.CurrentUser); myPersonalStore.Open(OpenFlags.ReadOnly); foreach (X509Certificate2 certificate in myPersonalStore.Certificates) { if (certificate.Subject.Contains("E=" + message.From)) { message.SecureSign(certificate, X509IncludeOption.ExcludeRoot, DigestAlgorithm.Sha1, true, false); return message; } } return null; } private MailMessage getEncryptedMessage(MailMessage message) { // 暗号化に使用する証明書をCURRENT USER/ADDRESSBOOKストアで検索します。 // 以下のコードを実行すると、"message.SecureEncrypt()"と同じ暗号化メッセージが得られます。 X509Certificate2Collection encryptingCertificates = new X509Certificate2Collection(); X509Store addressBookStore = new X509Store(StoreName.AddressBook, StoreLocation.CurrentUser); addressBookStore.Open(OpenFlags.ReadOnly); foreach (X509Certificate2 certificate in addressBookStore.Certificates) { if (certificate.Subject.Contains("E=" + message.To)) { encryptingCertificates.Add(certificate); message.SecureEncrypt(encryptingCertificates, EncryptingAlgorithm.TripleDes, false); return message; } } return null; } private MailMessage getDecodedMessage(MailMessage message) { // 復号化に使用する証明書を、エクスポートされた証明書ファイルからロードします。 // メッセージをデコードし、証明書をCURRENT USER/MYストアにインポートします。 X509Certificate2 decryptingCertificate = new X509Certificate2(Application.StartupPath + "\\myCertificate.pfx"); message.SecureDecode(new X509Certificate2Collection(decryptingCertificate), true); return message; } |