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;
}

 

 


© 2003, GrapeCity inc. All rights reserved.