SslStreamとは? わかりやすく解説

SslStream クラス

メモ : このクラスは、.NET Framework version 2.0新しく追加されたものです。

クライアントサーバー間の通信使用するストリーム提供します。このクライアントサーバー間の通信では、SSL (Secure Socket Layer) セキュリティ プロトコル使用してサーバーオプションクライアント認証します。

名前空間: System.Net.Security
アセンブリ: System (system.dll 内)
構文構文

Public Class SslStream
    Inherits AuthenticatedStream
public class SslStream : AuthenticatedStream
public ref class SslStream : public
 AuthenticatedStream
public class SslStream extends AuthenticatedStream
public class SslStream extends
 AuthenticatedStream
解説解説

SSL プロトコル使用すると、SslStream使用して送信されメッセージ機密性整合性チェックできますクライアントサーバー間で機密情報やり取りする場合には、SslStream によって提供されるような SSL 接続使用する必要がありますSslStream使用すると、ネットワーク上で送信中に第三者情報読み取った改変したりするのを防ぐことができます

SslStream インスタンスは、SslStream作成時にユーザー指定するストリーム使用してデータ送信します。この基になるストリーム指定するときにはSslStream閉じたときに基になるストリーム閉じかどうか指定するオプションあります通常SslStream クラスは、TcpClient クラスと TcpListener クラス使用されます。GetStream メソッドには、SslStream クラスでの使用適した NetworkStream が用意されています。

SslStream作成したら、サーバーオプションクライアント認証する必要がありますサーバーは、その ID証明する X509 証明書提供する必要があり、クライアントにもこれを提供することを要求できますSslStream使用して情報送信する前に認証を行う必要がありますクライアントは、認証完了するまでブロックする同期 AuthenticateAsClient メソッド、または認証完了するまでブロックせずに待機する非同期 BeginAuthenticateAsClient メソッド使用して認証開始しますサーバーは、同期 AuthenticateAsServer メソッドまたは非同期 BeginAuthenticateAsServer メソッド使用して認証開始しますクライアントサーバー両方認証を行う必要があります

認証は、SSPI (Security Support Provider) チャネル プロバイダによって処理されます。SslStream作成時に RemoteCertificateValidationCallback デリゲート指定することによって、クライアントサーバーの証明書の検証制御できるようになります。CertificateValidationCallback デリゲート指定すると、サーバー検証制御できますデリゲートによって参照されるメソッドには、リモートの証明書と、証明書検証時に SSPI検出したエラー含まれます。サーバーデリゲート指定した場合サーバークライアント認証要求したかどうかに関係なく、そのデリゲートメソッド呼び出されます。サーバークライアント認証要求しなかった場合サーバーデリゲートメソッドは、null 証明書証明書エラーの空の配列受け取ります

サーバークライアント認証を必要とする場合クライアント認証使用する 1 つ上の証明書指定する必要がありますクライアント複数の証明書がある場合には、クライアントは LocalCertificateSelectionCallback デリゲート提供してサーバー対す適切な証明書選択できますクライアントの証明書は、現在のユーザーの "My" 証明書ストア格納する必要があります証明書によるクライアント認証は、Ssl2 (SSL Version 2) プロトコルではサポートされていません。

認証失敗した場合、AuthenticationException が発生し、その SslStream使用できなくなりますガベージ コレクタ収集できるように、このオブジェクト閉じオブジェクトへのすべての参照削除する必要があります

SSL ハンドシェイクとも呼ばれる認証プロセス成功すると、サーバーID (およびオプションクライアントID) が確立されクライアントサーバーSslStream使用してメッセージ交換できます情報送受信する前にクライアントサーバーは、SslStream によって提供されるセキュリティ サービスセキュリティ レベルチェックし選択されているプロトコルアルゴリズム、および強度が、整合性機密性要件満たしているかどうか確認する必要があります現在の設定不十分な場合は、ストリーム閉じる必要があります。IsEncrypted プロパティと IsSigned プロパティ使用すると、SslStream によって提供されるセキュリティ サービスチェックできます認証暗号化、およびデータ署名使用する暗号化設定報告する要素次の表に示します

要素

メンバ

サーバーオプションクライアント認証使用するセキュリティ プロトコル

SslProtocol プロパティおよび関連付けられた SslProtocols 列挙

キー交換アルゴリズム

KeyExchangeAlgorithm プロパティおよび関連付けられた ExchangeAlgorithmType 列挙

メッセージ整合性アルゴリズム

HashAlgorithm プロパティおよび関連付けられた HashAlgorithmType 列挙

メッセージ機密性アルゴリズム

CipherAlgorithm プロパティおよび関連付けられた CipherAlgorithmType 列挙

選択されアルゴリズム強度

KeyExchangeStrength、HashStrength、および CipherStrength の各プロパティ

認証成功したら、同期 Write メソッドまたは非同期 BeginWrite メソッド使用してデータ送信できますデータ受信するには、同期 Read メソッドまたは非同期 BeginRead メソッド使用します

基になるストリーム開いたままにしておくように SslStream に指定している場合は、ストリーム使い終わったときに、ユーザーストリーム閉じる必要があります

使用例使用例

SslStream クラス使用してクライアント通信する TcpListener作成するコード例次に示します

using System;
using System.Collections;
using System.Net;
using System.Net.Sockets;
using System.Net.Security;
using System.Security.Authentication;
using System.Text;
using System.Security.Cryptography.X509Certificates;
using System.IO;

namespace Examples.System.Net
{
    public sealed class SslTcpServer 
    {
        static X509Certificate serverCertificate = null;
        // The certificate parameter specifies the name of the file
 
        // containing the machine certificate.
        public static void
 RunServer(string certificate) 
        {
            serverCertificate = X509Certificate.CreateFromCertFile(certificate);
            // Create a TCP/IP (IPv4) socket and listen for incoming
 connections.
            TcpListener listener = new TcpListener(IPAddress.Any,
 8080);    
            listener.Start();
            while (true) 
            {
                Console.WriteLine("Waiting for a client to
 connect...");
                // Application blocks while waiting for an incoming
 connection.
                // Type CNTL-C to terminate the server.
                TcpClient client = listener.AcceptTcpClient();
                ProcessClient(client);
            }
        }
        static void ProcessClient (TcpClient
 client)
        {
            // A client has connected. Create the 
            // SslStream using the client's network stream.
            SslStream sslStream = new SslStream(
                client.GetStream(), false);
            // Authenticate the server but don't require the client
 to authenticate.
            try 
            {
                sslStream.AuthenticateAsServer(serverCertificate, 
                    false, SslProtocols.Tls, true);
                // Display the properties and settings for the authenticated
 stream.
                DisplaySecurityLevel(sslStream);
                DisplaySecurityServices(sslStream);
                DisplayCertificateInformation(sslStream);
                DisplayStreamProperties(sslStream);

                // Set timeouts for the read and write to 5 seconds.
                sslStream.ReadTimeout = 5000;
                sslStream.WriteTimeout = 5000;
                // Read a message from the client.   
                Console.WriteLine("Waiting for client message...");
                string messageData = ReadMessage(sslStream);
                Console.WriteLine("Received: {0}", messageData);
                
                // Write a message to the client.
                byte[] message = Encoding.UTF8.GetBytes("Hello from the server.<EOF>");
                Console.WriteLine("Sending hello message.");
                sslStream.Write(message);
            }
            catch (AuthenticationException e)
            {
                Console.WriteLine("Exception: {0}", e.Message);
                if (e.InnerException != null)
                {
                    Console.WriteLine("Inner exception: {0}", e.InnerException.Message);
                }
                Console.WriteLine ("Authentication failed - closing the connection.");
                sslStream.Close();
                client.Close();
                return;
            }
            finally
            {
                // The client stream will be closed with the sslStream
                // because we specified this behavior when creating
                // the sslStream.
                sslStream.Close();
                client.Close();
            }
        }
        static string ReadMessage(SslStream
 sslStream)
        {
            // Read the  message sent by the client.
            // The client signals the end of the message using the
            // "<EOF>" marker.
            byte [] buffer = new byte[2048];
            StringBuilder messageData = new StringBuilder();
            int bytes = -1;
            do
            {
                // Read the client's test message.
                bytes = sslStream.Read(buffer, 0, buffer.Length);
                        
                // Use Decoder class to convert from bytes to UTF8
                // in case a character spans two buffers.
                Decoder decoder = Encoding.UTF8.GetDecoder();
                char[] chars = new char[decoder.GetCharCount(buffer
,0,bytes)];
                decoder.GetChars(buffer, 0, bytes, chars,0);
                messageData.Append (chars);
                // Check for EOF or an empty message.
                if (messageData.ToString().IndexOf("<EOF>")
 != -1)
                {
                    break;
                }
            } while (bytes !=0); 
            
            return messageData.ToString();
        }
         static void DisplaySecurityLevel(SslStream
 stream)
         {
            Console.WriteLine("Cipher: {0} strength {1}", stream.CipherAlgorithm,
 stream.CipherStrength);
            Console.WriteLine("Hash: {0} strength {1}", stream.HashAlgorithm,
 stream.HashStrength);
            Console.WriteLine("Key exchange: {0} strength {1}", stream.KeyExchangeAlgorithm,
 stream.KeyExchangeStrength);
            Console.WriteLine("Protocol: {0}", stream.SslProtocol);
         }
         static void DisplaySecurityServices(SslStream
 stream)
         {
            Console.WriteLine("Is authenticated: {0} as server? {1}", stream.IsAuthenticated,
 stream.IsServer);
            Console.WriteLine("IsSigned: {0}", stream.IsSigned);
            Console.WriteLine("Is Encrypted: {0}", stream.IsEncrypted);
         }
         static void DisplayStreamProperties(SslStream
 stream)
         {
            Console.WriteLine("Can read: {0}, write {1}", stream.CanRead,
 stream.CanWrite);
            Console.WriteLine("Can timeout: {0}", stream.CanTimeout);
         }
        static void DisplayCertificateInformation(SslStream
 stream)
        {
            Console.WriteLine("Certificate revocation list checked: {0}",
 stream.CheckCertRevocationStatus);
                
            X509Certificate localCertificate = stream.LocalCertificate;
            if (stream.LocalCertificate != null)
            {
                Console.WriteLine("Local cert was issued to {0} and is valid
 from {1} until {2}.",
                    localCertificate.Subject,
                    localCertificate.GetEffectiveDateString(),
                    localCertificate.GetExpirationDateString());
             } else
            {
                Console.WriteLine("Local certificate is null.");
            }
            // Display the properties of the client's certificate.
            X509Certificate remoteCertificate = stream.RemoteCertificate;
            if (stream.RemoteCertificate != null)
            {
            Console.WriteLine("Remote cert was issued to {0} and is valid from
 {1} until {2}.",
                remoteCertificate.Subject,
                remoteCertificate.GetEffectiveDateString(),
                remoteCertificate.GetExpirationDateString());
            } else
            {
                Console.WriteLine("Remote certificate is null.");
            }
        }
        private static void
 DisplayUsage()
        { 
            Console.WriteLine("To start the server specify:");
            Console.WriteLine("serverSync certificateFile.cer");
            Environment.Exit(1);
        }
        public static int
 Main(string[] args)
        {
            string certificate = null;
            if (args == null ||args.Length
 < 1 )
            {
                DisplayUsage();
            }
            certificate = args[0];
            SslTcpServer.RunServer (certificate);
            return 0;
        } 
    }
}

SslStream クラス使用してサーバー通信する TcpClient作成するコード例次に示します

using System;
using System.Collections;
using System.Net;
using System.Net.Security;
using System.Net.Sockets;
using System.Security.Authentication;
using System.Text;
using System.Security.Cryptography.X509Certificates;
using System.IO;

namespace Examples.System.Net
{
    public class SslTcpClient 
    {   
        private static Hashtable certificateErrors
 = new Hashtable();
      
        // The following method is invoked by the RemoteCertificateValidationDelegate.
        public static bool
 ValidateServerCertificate(
              object sender,
              X509Certificate certificate,
              X509Chain chain,
              SslPolicyErrors sslPolicyErrors)
        {
           if (sslPolicyErrors == SslPolicyErrors.None)
                return true;

            Console.WriteLine("Certificate error: {0}", sslPolicyErrors);
            
            // Do not allow this client to communicate with unauthenticated
 servers.
            return false;
        }
        public static void
 RunClient(string machineName, string serverName)
  
        {
            // Create a TCP/IP client socket.
            // machineName is the host running the server application.
            TcpClient client = new TcpClient(machineName,443);
            Console.WriteLine("Client connected.");
            // Create an SSL stream that will close the client's stream.
            SslStream sslStream = new SslStream(
                client.GetStream(), 
                false, 
                new RemoteCertificateValidationCallback (ValidateServerCertificate),
 
                null
                );
            // The server name must match the name on the server certificate.
            try 
            {
                sslStream.AuthenticateAsClient(serverName);
            } 
            catch (AuthenticationException e)
            {
                Console.WriteLine("Exception: {0}", e.Message);
                if (e.InnerException != null)
                {
                    Console.WriteLine("Inner exception: {0}", e.InnerException.Message);
                }
                Console.WriteLine ("Authentication failed - closing the connection.");
                client.Close();
                return;
            }
            // Encode a test message into a byte array.
            // Signal the end of the message using the "<EOF>".
            byte[] messsage = Encoding.UTF8.GetBytes("Hello from the client.<EOF>");
            // Send hello message to the server. 
            sslStream.Write(messsage);
            sslStream.Flush();
            // Read message from the server.
            string serverMessage = ReadMessage(sslStream);
            Console.WriteLine("Server says: {0}", serverMessage);
            // Close the client connection.
            client.Close();
            Console.WriteLine("Client closed.");
        }
        static string ReadMessage(SslStream
 sslStream)
        {
            // Read the  message sent by the server.
            // The end of the message is signaled using the
            // "<EOF>" marker.
            byte [] buffer = new byte[2048];
            StringBuilder messageData = new StringBuilder();
            int bytes = -1;
            do
            {
                bytes = sslStream.Read(buffer, 0, buffer.Length);
                        
                // Use Decoder class to convert from bytes to UTF8
                // in case a character spans two buffers.
                Decoder decoder = Encoding.UTF8.GetDecoder();
                char[] chars = new char[decoder.GetCharCount(buffer
,0,bytes)];
                decoder.GetChars(buffer, 0, bytes, chars,0);
                messageData.Append (chars);
                // Check for EOF.
                if (messageData.ToString().IndexOf("<EOF>")
 != -1)
                {
                    break;
                }
            } while (bytes != 0); 
            
            return messageData.ToString();
        }
        private static void
 DisplayUsage()
        { 
            Console.WriteLine("To start the client specify:");
            Console.WriteLine("clientSync machineName [serverName]");
            Environment.Exit(1);
        }
        public static int
 Main(string[] args)
        {
            string serverCertificateName = null;
            string machineName = null;
            if (args == null ||args.Length
 <1 )
            {
                DisplayUsage();
            }
            // User can specify the machine name and server name.
            // Server name must match the name on the server's certificate.
 
            machineName = args[0];
            if (args.Length <2 )
            {
                serverCertificateName = machineName;
            }
            else 
            {
                serverCertificateName = args[1];
            }
            SslTcpClient.RunClient (machineName, serverCertificateName);
            return 0;
        }
    }
}
    
継承階層継承階層
System.Object
   System.MarshalByRefObject
     System.IO.Stream
       System.Net.Security.AuthenticatedStream
        System.Net.Security.SslStream
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバ場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
SslStream メンバ
System.Net.Security 名前空間
NegotiateStream クラス
AuthenticatedStream クラス

SslStream コンストラクタ (Stream, Boolean)

メモ : このコンストラクタは、.NET Framework version 2.0新しく追加されたものです。

指定した Streamストリーム閉じ動作使用してSslStream クラス新しインスタンス初期化します。

名前空間: System.Net.Security
アセンブリ: System (system.dll 内)
構文構文

Public Sub New ( _
    innerStream As Stream, _
    leaveInnerStreamOpen As Boolean _
)
Dim innerStream As Stream
Dim leaveInnerStreamOpen As Boolean

Dim instance As New SslStream(innerStream,
 leaveInnerStreamOpen)
public SslStream (
    Stream innerStream,
    bool leaveInnerStreamOpen
)
public:
SslStream (
    Stream^ innerStream, 
    bool leaveInnerStreamOpen
)
public SslStream (
    Stream innerStream, 
    boolean leaveInnerStreamOpen
)
public function SslStream (
    innerStream : Stream, 
    leaveInnerStreamOpen : boolean
)

パラメータ

innerStream

指定した Streamストリーム閉じ動作使用して、SslStream クラス新しインスタンス初期化します。

leaveInnerStreamOpen

指定した Streamストリーム閉じ動作使用してSslStream クラス新しインスタンス初期化します。

例外例外
例外種類条件

ArgumentException

innerStream読み取り可能ではありません。

または

innerStream書き込み可能ではありません。

ArgumentNullException

innerStreamnull 参照 (Visual Basic では Nothing) です。

または

innerStreamNull等価です。

解説解説

leaveStreamOpen パラメータtrue指定すると、SslStream閉じてinnerStream ストリームには影響しません。innerStream不要になった場合は、明示的に閉じる必要があります

使用例使用例

このコンストラクタ実際に呼び出すコード例次に示します

static void ProcessClient (TcpClient client)
{
    // A client has connected. Create the 
    // SslStream using the client's network stream.
    SslStream sslStream = new SslStream(
        client.GetStream(), false);
    // Authenticate the server but don't require the client to authenticate.
    try 
    {
        sslStream.AuthenticateAsServer(serverCertificate, 
            false, SslProtocols.Tls, true);
        // Display the properties and settings for the authenticated
 stream.
        DisplaySecurityLevel(sslStream);
        DisplaySecurityServices(sslStream);
        DisplayCertificateInformation(sslStream);
        DisplayStreamProperties(sslStream);

        // Set timeouts for the read and write to 5 seconds.
        sslStream.ReadTimeout = 5000;
        sslStream.WriteTimeout = 5000;
        // Read a message from the client.   
        Console.WriteLine("Waiting for client message...");
        string messageData = ReadMessage(sslStream);
        Console.WriteLine("Received: {0}", messageData);
        
        // Write a message to the client.
        byte[] message = Encoding.UTF8.GetBytes("Hello from the server.<EOF>");
        Console.WriteLine("Sending hello message.");
        sslStream.Write(message);
    }
    catch (AuthenticationException e)
    {
        Console.WriteLine("Exception: {0}", e.Message);
        if (e.InnerException != null)
        {
            Console.WriteLine("Inner exception: {0}", e.InnerException.Message);
        }
        Console.WriteLine ("Authentication failed - closing the connection.");
        sslStream.Close();
        client.Close();
        return;
    }
    finally
    {
        // The client stream will be closed with the sslStream
        // because we specified this behavior when creating
        // the sslStream.
        sslStream.Close();
        client.Close();
    }
}
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
SslStream クラス
SslStream メンバ
System.Net.Security 名前空間

SslStream コンストラクタ (Stream)

メモ : このコンストラクタは、.NET Framework version 2.0新しく追加されたものです。

Stream指定してSslStream クラス新しインスタンス初期化します。

名前空間: System.Net.Security
アセンブリ: System (system.dll 内)
構文構文

Public Sub New ( _
    innerStream As Stream _
)
Dim innerStream As Stream

Dim instance As New SslStream(innerStream)
public SslStream (
    Stream innerStream
)
public:
SslStream (
    Stream^ innerStream
)
public SslStream (
    Stream innerStream
)
public function SslStream (
    innerStream : Stream
)

パラメータ

innerStream

SslStream がデータの送受信使用する Stream オブジェクト

例外例外
例外種類条件

ArgumentException

innerStream読み取り可能ではありません。

または

innerStream書き込み可能ではありません。

ArgumentNullException

innerStreamnull 参照 (Visual Basic では Nothing) です。

または

innerStreamNull等価です。

プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
SslStream クラス
SslStream メンバ
System.Net.Security 名前空間

SslStream コンストラクタ (Stream, Boolean, RemoteCertificateValidationCallback)

メモ : このコンストラクタは、.NET Framework version 2.0新しく追加されたものです。

指定した Streamストリーム閉じ動作、および証明書検証デリゲート使用してSslStream クラス新しインスタンス初期化します。

名前空間: System.Net.Security
アセンブリ: System (system.dll 内)
構文構文

Public Sub New ( _
    innerStream As Stream, _
    leaveInnerStreamOpen As Boolean, _
    userCertificateValidationCallback As RemoteCertificateValidationCallback
 _
)
Dim innerStream As Stream
Dim leaveInnerStreamOpen As Boolean
Dim userCertificateValidationCallback As RemoteCertificateValidationCallback

Dim instance As New SslStream(innerStream,
 leaveInnerStreamOpen, userCertificateValidationCallback)
public SslStream (
    Stream innerStream,
    bool leaveInnerStreamOpen,
    RemoteCertificateValidationCallback userCertificateValidationCallback
)
public:
SslStream (
    Stream^ innerStream, 
    bool leaveInnerStreamOpen, 
    RemoteCertificateValidationCallback^ userCertificateValidationCallback
)
public SslStream (
    Stream innerStream, 
    boolean leaveInnerStreamOpen, 
    RemoteCertificateValidationCallback userCertificateValidationCallback
)
public function SslStream (
    innerStream : Stream, 
    leaveInnerStreamOpen : boolean, 
    userCertificateValidationCallback : RemoteCertificateValidationCallback
)

パラメータ

innerStream

指定した Streamストリーム閉じ動作使用して、SslStream クラス新しインスタンス初期化します。

leaveInnerStreamOpen

指定した Streamストリーム閉じ動作使用してSslStream クラス新しインスタンス初期化します。

userCertificateValidationCallback

リモート側によって提供される証明書検証する RemoteCertificateValidationCallback デリゲート

例外例外
例外種類条件

ArgumentException

innerStream読み取り可能ではありません。

または

innerStream書き込み可能ではありません。

ArgumentNullException

innerStreamnull 参照 (Visual Basic では Nothing) です。

または

innerStreamNull等価です。

解説解説

leaveStreamOpen パラメータtrue指定すると、SslStream閉じてinnerStream ストリームには影響しません。innerStream不要になった場合は、明示的に閉じる必要があります

userCertificateValidationCallback デリゲート引数 certificateErrors には、チャネル SSPI (Security Support Provider Interface) によって返されるすべての Windows エラー コード含まれます。userCertificateValidationCallback デリゲートによって呼び出されるメソッド戻り値によって、認証成功したかどうか判断します

userCertificateValidationCallback デリゲートメソッド呼び出されときにはセキュリティ プロトコル暗号化アルゴリズムは既に選択されています。このメソッド使用すると、選択されている暗号化アルゴリズム強度アプリケーションにとって十分であるかどうか確認できます不十分な場合には、このメソッドfalse返しSslStream作成されないようにします。

メモメモ

.NET Framework は、作成されSSL セッションキャッシュし、可能な場合にはキャッシュされているセッション新し要求再利用しようとしますSSL セッション再利用試み場合.NET Framework は、ClientCertificates が存在すればその最初要素使用しClientCertificates が空であれば匿名セッション再利用試みます

Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition プラットフォームメモ : .NET Framework は、クライアント証明書必要でない場合にだけ SSL セッション再利用試みます

使用例使用例

SslStream作成し認証クライアント部分開始するコード例次に示します

// Create a TCP/IP client socket.
// machineName is the host running the server application.
TcpClient client = new TcpClient(machineName,443);
Console.WriteLine("Client connected.");
// Create an SSL stream that will close the client's stream.
SslStream sslStream = new SslStream(
    client.GetStream(), 
    false, 
    new RemoteCertificateValidationCallback (ValidateServerCertificate),
 
    null
    );
// The server name must match the name on the server certificate.
try 
{
    sslStream.AuthenticateAsClient(serverName);
} 
catch (AuthenticationException e)
{
    Console.WriteLine("Exception: {0}", e.Message);
    if (e.InnerException != null)
    {
        Console.WriteLine("Inner exception: {0}", e.InnerException.Message);
    }
    Console.WriteLine ("Authentication failed - closing the connection.");
    client.Close();
    return;
}
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
SslStream クラス
SslStream メンバ
System.Net.Security 名前空間

SslStream コンストラクタ (Stream, Boolean, RemoteCertificateValidationCallback, LocalCertificateSelectionCallback)

メモ : このコンストラクタは、.NET Framework version 2.0新しく追加されたものです。

指定した Streamストリーム閉じ動作証明書検証デリゲート、および証明書選択デリゲート使用してSslStream クラス新しインスタンス初期化します。

名前空間: System.Net.Security
アセンブリ: System (system.dll 内)
構文構文

Public Sub New ( _
    innerStream As Stream, _
    leaveInnerStreamOpen As Boolean, _
    userCertificateValidationCallback As RemoteCertificateValidationCallback,
 _
    userCertificateSelectionCallback As LocalCertificateSelectionCallback
 _
)
Dim innerStream As Stream
Dim leaveInnerStreamOpen As Boolean
Dim userCertificateValidationCallback As RemoteCertificateValidationCallback
Dim userCertificateSelectionCallback As LocalCertificateSelectionCallback

Dim instance As New SslStream(innerStream,
 leaveInnerStreamOpen, userCertificateValidationCallback, userCertificateSelectionCallback)
public SslStream (
    Stream innerStream,
    bool leaveInnerStreamOpen,
    RemoteCertificateValidationCallback userCertificateValidationCallback,
    LocalCertificateSelectionCallback userCertificateSelectionCallback
)
public:
SslStream (
    Stream^ innerStream, 
    bool leaveInnerStreamOpen, 
    RemoteCertificateValidationCallback^ userCertificateValidationCallback, 
    LocalCertificateSelectionCallback^ userCertificateSelectionCallback
)
public SslStream (
    Stream innerStream, 
    boolean leaveInnerStreamOpen, 
    RemoteCertificateValidationCallback userCertificateValidationCallback, 
    LocalCertificateSelectionCallback userCertificateSelectionCallback
)
public function SslStream (
    innerStream : Stream, 
    leaveInnerStreamOpen : boolean, 
    userCertificateValidationCallback : RemoteCertificateValidationCallback, 
    userCertificateSelectionCallback : LocalCertificateSelectionCallback
)

パラメータ

innerStream

指定した Streamストリーム閉じ動作使用して、SslStream クラス新しインスタンス初期化します。

leaveInnerStreamOpen

指定した Streamストリーム閉じ動作使用してSslStream クラス新しインスタンス初期化します。

userCertificateValidationCallback

リモート側によって提供される証明書検証する RemoteCertificateValidationCallback デリゲート

userCertificateSelectionCallback

認証使用する証明書選択する LocalCertificateSelectionCallback デリゲート

例外例外
例外種類条件

ArgumentException

innerStream読み取り可能ではありません。

または

innerStream書き込み可能ではありません。

ArgumentNullException

innerStreamnull 参照 (Visual Basic では Nothing) です。

または

innerStreamNull等価です。

解説解説

leaveStreamOpen パラメータtrue指定すると、SslStream閉じてinnerStream ストリームには影響しません。innerStream不要になった場合は、明示的に閉じる必要があります

userCertificateValidationCallback デリゲート引数 certificateErrors には、チャネル SSPI (Security Support Provider Interface) によって返されるすべての Windows エラー コード含まれます。userCertificateValidationCallback デリゲートによって呼び出されるメソッド戻り値によって、認証成功したかどうか判断します

userCertificateValidationCallback デリゲートメソッド呼び出されときにはセキュリティ プロトコル暗号化アルゴリズムは既に選択されています。このメソッド使用すると、選択されている暗号化アルゴリズム強度アプリケーションにとって十分であるかどうか確認できます不十分な場合には、このメソッドfalse返しSslStream作成されないようにします。

userCertificateSelectionCallback デリゲートは、アプリケーション複数の証明書があり、証明書動的に選択する必要がある場合役立ちます。"MY" ストアの証明書は、デリゲートによって呼び出されるメソッド渡されます。

メモメモ

.NET Framework は、作成されSSL セッションキャッシュし、可能な場合にはキャッシュされているセッション新し要求再利用しようとしますSSL セッション再利用試みるときに、.NET Framework は P:System.Net.HttpWebRequest.ClientCertificates が存在する場合はその最初要素使用し、P:System.Net.HttpWebRequest.ClientCertificates が空の場合は、匿名セッション再利用試みます

Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition プラットフォームメモ : .NET Framework は、クライアント証明書必要でない場合にだけ SSL セッション再利用試みます

使用例使用例

このコンストラクタ実際に呼び出すコード例次に示します。このコード例は、SslStream クラストピック取り上げているコード例一部分です。

// Server name must match the host name and the name on the host's certificate.
 
serverName = args[0];
// Create a TCP/IP client socket.
TcpClient client = new TcpClient(serverName,80);
Console.WriteLine("Client connected.");
// Create an SSL stream that will close the client's stream.
SslStream sslStream = new SslStream(
    client.GetStream(), 
    false, 
    new RemoteCertificateValidationCallback (ValidateServerCertificate),
 
    new LocalCertificateSelectionCallback(SelectLocalCertificate)
    );
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
SslStream クラス
SslStream メンバ
System.Net.Security 名前空間

SslStream コンストラクタ


SslStream プロパティ


パブリック プロパティパブリック プロパティ

( プロテクト プロパティ参照)
  名前 説明
パブリック プロパティ CanRead オーバーライドされます。 基になるストリーム読み取り可能かどうかを示す Boolean 値を取得します
パブリック プロパティ CanSeek オーバーライドされます。 基になるストリームシークできるかどうかを示す Boolean 値を取得します
パブリック プロパティ CanTimeout オーバーライドされます。 基になるストリームタイムアウトサポートしているかどうかを示す Boolean 値を取得します
パブリック プロパティ CanWrite オーバーライドされます。 基になるストリーム書き込み可能かどうかを示す Boolean 値を取得します
パブリック プロパティ CheckCertRevocationStatus 証明書検証プロセスで、証明書失効リスト照合するかどうかを示す Boolean 値を取得または設定します
パブリック プロパティ CipherAlgorithm この SslStream が使用する一括暗号化アルゴリズム識別する値を取得します
パブリック プロパティ CipherStrength この SslStream使用する暗号アルゴリズム強度識別する値を取得します
パブリック プロパティ HashAlgorithm メッセージ認証コード (MAC: Message Authentication Code) の生成使用するアルゴリズム取得します
パブリック プロパティ HashStrength このインスタンス使用するハッシュ アルゴリズム強度識別する値を取得します
パブリック プロパティ IsAuthenticated オーバーライドされます認証成功したかどうかを示す Boolean 値を取得します
パブリック プロパティ IsEncrypted オーバーライドされます。 この SslStreamデータ暗号化使用するかどうかを示す Boolean 値を取得します
パブリック プロパティ IsMutuallyAuthenticated オーバーライドされますサーバークライアント両方認証されているかどうかを示す Boolean 値を取得します
パブリック プロパティ IsServer オーバーライドされます。 この SslStream使用する接続ローカル側がサーバーとして認証されたかどうかを示す Boolean 値を取得します
パブリック プロパティ IsSigned オーバーライドされます。 このストリーム使用して送信されるデータ署名するかどうかを示す Boolean 値を取得します
パブリック プロパティ KeyExchangeAlgorithm この SslStream使用するキー交換アルゴリズム取得します
パブリック プロパティ KeyExchangeStrength このインスタンス使用するキー交換アルゴリズム強度識別する値を取得します
パブリック プロパティ LeaveInnerStreamOpen  この AuthenticatedStream がデータの送受信使用するストリームが、開いたままになっているかどうかを示す値を取得します。 ( AuthenticatedStream から継承されます。)
パブリック プロパティ Length オーバーライドされます。 基になるストリーム長さ取得します
パブリック プロパティ LocalCertificate ローカル エンドポイント認証使用する証明書取得します
パブリック プロパティ Position オーバーライドされます。 基になるストリーム内の現在位置取得または設定します
パブリック プロパティ ReadTimeout オーバーライドされます読み取り操作ブロックしてデータ待機する時間取得または設定します
パブリック プロパティ RemoteCertificate リモート エンドポイント認証使用する証明書取得します
パブリック プロパティ SslProtocol この接続認証使用するセキュリティ プロトコルを示す値を取得します
パブリック プロパティ WriteTimeout オーバーライドされます書き込み操作ブロックしてデータ待機する時間取得または設定します
プロテクト プロパティプロテクト プロパティ
  名前 説明
プロテクト プロパティ InnerStream  この AuthenticatedStreamデータの送受信使用するストリーム取得します。 ( AuthenticatedStream から継承されます。)
参照参照

関連項目

SslStream クラス
System.Net.Security 名前空間
NegotiateStream クラス
AuthenticatedStream クラス

SslStream メソッド


パブリック メソッドパブリック メソッド

( プロテクト メソッド参照)
  名前 説明
パブリック メソッド AuthenticateAsClient オーバーロードされますクライアントサーバー間の接続クライアント側認証します。
パブリック メソッド AuthenticateAsServer オーバーロードされますサーバーによって呼び出されクライアントサーバー間の接続サーバーオプションクライアント認証します。
パブリック メソッド BeginAuthenticateAsClient オーバーロードされますクライアントサーバー間の接続クライアント側認証する非同期操作開始します
パブリック メソッド BeginAuthenticateAsServer オーバーロードされますクライアントサーバー間の接続サーバー側の認証処理する非同期操作開始します
パブリック メソッド BeginRead オーバーライドされますストリームからデータ読み取り指定した配列格納する非同期読み取り操作開始します
パブリック メソッド BeginWrite オーバーライドされます指定したバッファからストリームByte書き込む非同期書き込み操作開始します
パブリック メソッド Close  現在のストリーム閉じ現在のストリーム関連付けられているすべてのリソース (ソケットファイル ハンドルなど) を解放します。 ( Stream から継承されます。)
パブリック メソッド CreateObjRef  リモート オブジェクトとの通信使用するプロキシ生成必要な情報をすべて格納しているオブジェクト作成します。 ( MarshalByRefObject から継承されます。)
パブリック メソッド Dispose オーバーロードされます。  
パブリック メソッド EndAuthenticateAsClient BeginAuthenticateAsServer以前呼び出し開始した保留中の非同期サーバー認証操作終了します
パブリック メソッド EndAuthenticateAsServer BeginAuthenticateAsClient の以前呼び出し開始した保留中の非同期クライアント認証操作終了します
パブリック メソッド EndRead オーバーライドされます。 BeginRead の以前呼び出し開始した非同期読み取り操作終了します
パブリック メソッド EndWrite オーバーライドされます。 BeginWrite の以前呼び出し開始した非同期書き込み操作終了します
パブリック メソッド Equals  オーバーロードされます2 つObject インスタンス等しかどうか判断します。 ( Object から継承されます。)
パブリック メソッド Flush オーバーライドされますバッファ格納されデータが基になるデバイス書き込まれるようにします。
パブリック メソッド GetHashCode  特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用適してます。 ( Object から継承されます。)
パブリック メソッド GetLifetimeService  対象インスタンス有効期間ポリシー制御する現在の有効期間サービス オブジェクト取得します。 ( MarshalByRefObject から継承されます。)
パブリック メソッド GetType  現在のインスタンスType取得します。 ( Object から継承されます。)
パブリック メソッド InitializeLifetimeService  対象インスタンス有効期間ポリシー制御する有効期間サービス オブジェクト取得します。 ( MarshalByRefObject から継承されます。)
パブリック メソッド Read オーバーライドされます。 このストリームからデータ読み取り指定した配列格納します
パブリック メソッド ReadByte  ストリームから 1 バイト読み取りストリーム内の位置1 バイト進めますストリーム末尾場合は -1 を返します。 ( Stream から継承されます。)
パブリック メソッド ReferenceEquals  指定した複数Object インスタンス同一かどうか判断します。 ( Object から継承されます。)
パブリック メソッド Seek オーバーライドされます。 NotSupportedException をスローます。
パブリック メソッド SetLength オーバーライドされます。 基になるストリーム長さ設定します
パブリック メソッド Synchronized  指定した Stream オブジェクトラップするスレッド セーフな (同期された) ラッパー作成します。 ( Stream から継承されます。)
パブリック メソッド ToString  現在の Object を表す String返します。 ( Object から継承されます。)
パブリック メソッド Write オーバーロードされます。 このストリームデータ書き込みます
パブリック メソッド WriteByte  ストリーム現在位置バイト書き込みストリーム位置1 バイトだけ進めます。 ( Stream から継承されます。)
プロテクト メソッドプロテクト メソッド
参照参照

関連項目

SslStream クラス
System.Net.Security 名前空間
NegotiateStream クラス
AuthenticatedStream クラス

SslStream メンバ

クライアントサーバー間の通信使用するストリーム提供します。このクライアントサーバー間の通信では、SSL (Secure Socket Layer) セキュリティ プロトコル使用してサーバーオプションクライアント認証します。

SslStream データ型公開されるメンバを以下の表に示します


パブリック コンストラクタパブリック コンストラクタ
パブリック プロパティパブリック プロパティ
( プロテクト プロパティ参照)
  名前 説明
パブリック プロパティ CanRead オーバーライドされます。 基になるストリーム読み取り可能かどうかを示す Boolean 値を取得します
パブリック プロパティ CanSeek オーバーライドされます。 基になるストリームシークできるかどうかを示す Boolean 値を取得します
パブリック プロパティ CanTimeout オーバーライドされます。 基になるストリームタイムアウトサポートしているかどうかを示す Boolean 値を取得します
パブリック プロパティ CanWrite オーバーライドされます。 基になるストリーム書き込み可能かどうかを示す Boolean 値を取得します
パブリック プロパティ CheckCertRevocationStatus 証明書検証プロセスで、証明書失効リスト照合するかどうかを示す Boolean 値を取得または設定します
パブリック プロパティ CipherAlgorithm この SslStream使用する一括暗号化アルゴリズム識別する値を取得します
パブリック プロパティ CipherStrength この SslStream使用する暗号アルゴリズム強度識別する値を取得します
パブリック プロパティ HashAlgorithm メッセージ認証コード (MAC: Message Authentication Code) の生成使用するアルゴリズム取得します
パブリック プロパティ HashStrength このインスタンス使用するハッシュ アルゴリズム強度識別する値を取得します
パブリック プロパティ IsAuthenticated オーバーライドされます認証成功したかどうかを示す Boolean 値を取得します
パブリック プロパティ IsEncrypted オーバーライドされます。 この SslStreamデータ暗号化使用するかどうかを示す Boolean 値を取得します
パブリック プロパティ IsMutuallyAuthenticated オーバーライドされますサーバークライアント両方認証されているかどうかを示す Boolean 値を取得します
パブリック プロパティ IsServer オーバーライドされます。 この SslStream使用する接続ローカル側がサーバーとして認証されたかどうかを示す Boolean 値を取得します
パブリック プロパティ IsSigned オーバーライドされます。 このストリーム使用して送信されるデータ署名するかどうかを示す Boolean 値を取得します
パブリック プロパティ KeyExchangeAlgorithm この SslStream使用するキー交換アルゴリズム取得します
パブリック プロパティ KeyExchangeStrength このインスタンス使用するキー交換アルゴリズム強度識別する値を取得します
パブリック プロパティ LeaveInnerStreamOpen  この AuthenticatedStream がデータの送受信使用するストリームが、開いたままになっているかどうかを示す値を取得します。(AuthenticatedStream から継承されます。)
パブリック プロパティ Length オーバーライドされます。 基になるストリーム長さ取得します
パブリック プロパティ LocalCertificate ローカル エンドポイント認証使用する証明書取得します
パブリック プロパティ Position オーバーライドされます。 基になるストリーム内の現在位置取得または設定します
パブリック プロパティ ReadTimeout オーバーライドされます読み取り操作ブロックしてデータ待機する時間取得または設定します
パブリック プロパティ RemoteCertificate リモート エンドポイント認証使用する証明書取得します
パブリック プロパティ SslProtocol この接続認証使用するセキュリティ プロトコルを示す値を取得します
パブリック プロパティ WriteTimeout オーバーライドされます書き込み操作ブロックしてデータ待機する時間取得または設定します
プロテクト プロパティプロテクト プロパティ
  名前 説明
プロテクト プロパティ InnerStream  この AuthenticatedStreamデータの送受信使用するストリーム取得します。(AuthenticatedStream から継承されます。)
パブリック メソッドパブリック メソッド
( プロテクト メソッド参照)
  名前 説明
パブリック メソッド AuthenticateAsClient オーバーロードされますクライアントサーバー間の接続クライアント側認証します。
パブリック メソッド AuthenticateAsServer オーバーロードされますサーバーによって呼び出されクライアントサーバー間の接続サーバーオプションクライアント認証します。
パブリック メソッド BeginAuthenticateAsClient オーバーロードされますクライアントサーバー間の接続クライアント側認証する非同期操作開始します
パブリック メソッド BeginAuthenticateAsServer オーバーロードされますクライアントサーバー間の接続サーバー側の認証処理する非同期操作開始します
パブリック メソッド BeginRead オーバーライドされますストリームからデータ読み取り指定した配列格納する非同期読み取り操作開始します
パブリック メソッド BeginWrite オーバーライドされます指定したバッファからストリームByte書き込む非同期書き込み操作開始します
パブリック メソッド Close  現在のストリーム閉じ現在のストリーム関連付けられているすべてのリソース (ソケットファイル ハンドルなど) を解放します。 (Stream から継承されます。)
パブリック メソッド CreateObjRef  リモート オブジェクトとの通信使用するプロキシ生成必要な情報をすべて格納しているオブジェクト作成します。 (MarshalByRefObject から継承されます。)
パブリック メソッド Dispose オーバーロードされます。  
パブリック メソッド EndAuthenticateAsClient BeginAuthenticateAsServer以前呼び出し開始した保留中の非同期サーバー認証操作終了します
パブリック メソッド EndAuthenticateAsServer BeginAuthenticateAsClient の以前呼び出し開始した保留中の非同期クライアント認証操作終了します
パブリック メソッド EndRead オーバーライドされます。 BeginRead の以前呼び出し開始した非同期読み取り操作終了します
パブリック メソッド EndWrite オーバーライドされます。 BeginWrite の以前呼び出し開始した非同期書き込み操作終了します
パブリック メソッド Equals  オーバーロードされます2 つObject インスタンス等しかどうか判断します。 (Object から継承されます。)
パブリック メソッド Flush オーバーライドされますバッファ格納されデータが基になるデバイス書き込まれるようにします。
パブリック メソッド GetHashCode  特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用適してます。 (Object から継承されます。)
パブリック メソッド GetLifetimeService  対象インスタンス有効期間ポリシー制御する現在の有効期間サービス オブジェクト取得します。 (MarshalByRefObject から継承されます。)
パブリック メソッド GetType  現在のインスタンスType取得します。 (Object から継承されます。)
パブリック メソッド InitializeLifetimeService  対象インスタンス有効期間ポリシー制御する有効期間サービス オブジェクト取得します。 (MarshalByRefObject から継承されます。)
パブリック メソッド Read オーバーライドされます。 このストリームからデータ読み取り指定した配列格納します
パブリック メソッド ReadByte  ストリームから 1 バイト読み取りストリーム内の位置1 バイト進めますストリーム末尾場合は -1 を返します。 (Stream から継承されます。)
パブリック メソッド ReferenceEquals  指定した複数Object インスタンス同一かどうか判断します。 (Object から継承されます。)
パブリック メソッド Seek オーバーライドされます。 NotSupportedException をスローます。
パブリック メソッド SetLength オーバーライドされます。 基になるストリーム長さ設定します
パブリック メソッド Synchronized  指定した Stream オブジェクトラップするスレッド セーフな (同期された) ラッパー作成します。 (Stream から継承されます。)
パブリック メソッド ToString  現在の Object を表す String返します。 (Object から継承されます。)
パブリック メソッド Write オーバーロードされます。 このストリームデータ書き込みます
パブリック メソッド WriteByte  ストリーム現在位置バイト書き込みストリーム位置1 バイトだけ進めます。 (Stream から継承されます。)
プロテクト メソッドプロテクト メソッド
参照参照

関連項目

SslStream クラス
System.Net.Security 名前空間
NegotiateStream クラス
AuthenticatedStream クラス



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「SslStream」の関連用語

SslStreamのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



SslStreamのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2024 Microsoft.All rights reserved.

©2024 GRAS Group, Inc.RSS