Dart.Mail 名前空間 > MailMessage クラス > SecureSign メソッド : SecureSign(X509Certificate2,X509IncludeOption,DigestAlgorithm,Boolean,Boolean) メソッド |
Public Overloads Function SecureSign( _ ByVal signingCertificate As X509Certificate2, _ ByVal includeOption As X509IncludeOption, _ ByVal digestAlgorithm As DigestAlgorithm, _ ByVal detached As Boolean, _ ByVal includeHeaders As Boolean _ ) As X509Certificate2Collection
例外 | 解説 |
---|---|
System.InvalidOperationException | Fromアドレスと一致する署名証明書が見つかりません。 |
署名メッセージの受信者は通常、署名証明書を自分のAddressBook証明書ストアに追加します。これにより、以後そのアドレスに送信するメッセージでS/MIME暗号化を実行するときにその証明書を使用できます。署名証明書には暗号化に必要な公開鍵が含まれています。
detachedがtrueの場合は、最初のパート(Parts[0])でメッセージコンテンツが平文で提供され、2番目のパート(Attachment型のParts[1])でデジタル署名が提供されます。 マルチパートメッセージでは、マルチパートMIMEエンティティを使用して複数のパートがParts[0]として集約されます(これは自動的に行われます)。 したがって、ほとんどの非S/MIMEメールリーダーはコンテンツを表示でき、S/MIMEメールリーダーはデジタル署名を使用してメッセージの改ざんをチェックできます。detachedがfalseの場合は、メッセージコンテンツがデジタル署名と組み合わせて単一のパート(Parts[0])に格納されます。この場合、非S/MIMEメールリーダーではコンテンツを表示できません。 通常、署名のみが使用される場合は、互換性のためにデタッチされた署名を使用することが推奨されます。標準的な署名と暗号化の両方が必要な場合は、まずdetachedにfalseを指定してこのメソッドを実行してから、SecureEncryptを使用します。
includeHeadersがfalseの場合は、コンテンツは暗号化されますが、メッセージヘッダはContentTypeを除いて変更されません。trueの場合は、メッセージ全体が暗号化され、復号化時にメールリーダーによって復元されます(これはバージョン3.1で導入されたもので、下位互換性はありません)。 この場合、Subject:、To:、From:、CC:などの機密性が高いヘッダフィールドは、署名した後に削除できます。ただしメールアドレスは、メッセージから削除した場合でもSmtp.Send()には含める必要があります。
バージョン2、3.0、および3.1とほぼ下位互換性があるS/MIMEバージョン3.2 RFC(5751、5652、5035、2634)に準拠します。
using System.Security.Cryptography.X509Certificates; private MailMessage getSignedMessage(MailMessage message) { // 署名に使用する証明書をCurrentUser/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.ToString())) { // メッセージを署名します。 message.SecureSign(certificate, X509IncludeOption.ExcludeRoot, DigestAlgorithm.Sha1, true, false); return message; } } return null; }
Imports System.Security.Cryptography.X509Certificates Private Function getSignedMessage(ByVal message As MailMessage) As MailMessage ' 署名に使用する証明書をCurrentUser/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.ToString()) Then ' メッセージを署名します。 message.SecureSign(certificate, X509IncludeOption.ExcludeRoot, DigestAlgorithm.Sha1, True, False) Return message End If Next certificate Return Nothing End Function