1 <Type Name="SslServerStream" FullName="Mono.Security.Protocol.Tls.SslServerStream">
2 <TypeSignature Language="C#" Maintainer="auto" Value="public class SslServerStream : Mono.Security.Protocol.Tls.SslStreamBase" />
4 <AssemblyName>Mono.Security</AssemblyName>
5 <AssemblyPublicKey>[00 24 00 00 04 80 00 00 94 00 00 00 06 02 00 00 00 24 00 00 52 53 41 31 00 04 00 00 01 00 01 00 79 15 99 77 D2 D0 3A 8E 6B EA 7A 2E 74 E8 D1 AF CC 93 E8 85 19 74 95 2B B4 80 A1 2C 91 34 47 4D 04 06 24 47 C3 7E 0E 68 C0 80 53 6F CF 3C 3F BE 2F F9 C9 79 CE 99 84 75 E5 06 E8 CE 82 DD 5B 0F 35 0D C1 0E 93 BF 2E EE CF 87 4B 24 77 0C 50 81 DB EA 74 47 FD DA FA 27 7B 22 DE 47 D6 FF EA 44 96 74 A4 F9 FC CF 84 D1 50 69 08 93 80 28 4D BD D3 5F 46 CD FF 12 A1 BD 78 E4 EF 00 65 D0 16 DF]</AssemblyPublicKey>
6 <AssemblyVersion>1.0.5000.0</AssemblyVersion>
7 <AssemblyVersion>2.0.0.0</AssemblyVersion>
9 <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
11 <BaseTypeName>Mono.Security.Protocol.Tls.SslStreamBase</BaseTypeName>
16 <summary>Server-side SSL/TLS stream.</summary>
23 using System.Net.Sockets;
26 using Mono.Security.Authenticode;
27 using Mono.Security.Protocol.Tls;
28 using System.Security.Cryptography;
29 using System.Security.Cryptography.X509Certificates;
31 namespace SslHttpServer
35 private static X509Certificate _certificate;
36 private static string certfile;
37 private static string keyfile;
39 static void Main (string [] args)
41 certfile = (args.Length > 0) ? args [0] : "ssl.cer";
42 keyfile = (args.Length > 0) ? args [0] : "ssl.pvk";
44 Socket listenSocket = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
45 IPEndPoint localEndPoint = new IPEndPoint (IPAddress.Any, 1888);
48 listenSocket.Bind (localEndPoint);
49 listenSocket.Listen (10);
53 requestSocket = listenSocket.Accept ();
54 using (NetworkStream ns = new NetworkStream (requestSocket, FileAccess.ReadWrite, true)) {
55 using (SslServerStream s = new SslServerStream (ns, Certificate, false, false)) {
56 s.PrivateKeyCertSelectionDelegate += new PrivateKeySelectionCallback (GetPrivateKey);
57 StreamReader reader = new StreamReader (s);
58 StreamWriter writer = new StreamWriter (s, Encoding.ASCII);
63 "Connection: close\r\n" +
64 "Content-Type: text/html\r\n" +
65 "Content-Encoding: " + Encoding.ASCII.WebName + "\r\n" +
67 "<html><body><h1>Hello World!</h1></body></html>\r\n";
69 // Read request header
71 line = reader.ReadLine ();
73 Console.WriteLine (line);
75 while (line != null && line.Length > 0);
78 writer.Write (answer);
86 catch (Exception ex) {
87 Console.WriteLine ("---------------------------------------------------------");
88 Console.WriteLine (ex.ToString ());
93 private static X509Certificate Certificate {
95 if (_certificate == null)
96 _certificate = X509Certificate.CreateFromCertFile (certfile);
101 // note: makecert creates the private key in the PVK format
102 private static AsymmetricAlgorithm GetPrivateKey (X509Certificate certificate, string targetHost)
104 PrivateKey key = PrivateKey.CreateFromFile (keyfile);
112 You can create a X.509 test certificate and it's private key with the following command:
113 <example><code>makecert -n "CN=localhost" -r -sv ssl.pvk ssl.cer
114 </code></example></para>
115 <para>Note: Thanks to Jörg Rosenkranz for the original code sample.</para>
119 <Member MemberName=".ctor">
120 <MemberSignature Language="C#" Value="public SslServerStream (System.IO.Stream stream, System.Security.Cryptography.X509Certificates.X509Certificate serverCertificate);" />
121 <MemberType>Constructor</MemberType>
124 <Parameter Name="stream" Type="System.IO.Stream" />
125 <Parameter Name="serverCertificate" Type="System.Security.Cryptography.X509Certificates.X509Certificate" />
128 <param name="stream">a <see cref="T:System.IO.Stream" /></param>
129 <param name="serverCertificate">a <see cref="T:System.Security.Cryptography.X509Certificates.X509Certificate" /></param>
130 <summary>To be added</summary>
131 <remarks>To be added</remarks>
134 <AssemblyVersion>1.0.5000.0</AssemblyVersion>
135 <AssemblyVersion>2.0.0.0</AssemblyVersion>
138 <Member MemberName=".ctor">
139 <MemberSignature Language="C#" Value="public SslServerStream (System.IO.Stream stream, System.Security.Cryptography.X509Certificates.X509Certificate serverCertificate, bool clientCertificateRequired, bool ownsStream);" />
140 <MemberType>Constructor</MemberType>
143 <Parameter Name="stream" Type="System.IO.Stream" />
144 <Parameter Name="serverCertificate" Type="System.Security.Cryptography.X509Certificates.X509Certificate" />
145 <Parameter Name="clientCertificateRequired" Type="System.Boolean" />
146 <Parameter Name="ownsStream" Type="System.Boolean" />
149 <param name="stream">a <see cref="T:System.IO.Stream" /></param>
150 <param name="serverCertificate">a <see cref="T:System.Security.Cryptography.X509Certificates.X509Certificate" /></param>
151 <param name="clientCertificateRequired">a <see cref="T:System.Boolean" /></param>
152 <param name="ownsStream">a <see cref="T:System.Boolean" /></param>
153 <summary>To be added</summary>
154 <remarks>To be added</remarks>
157 <AssemblyVersion>1.0.5000.0</AssemblyVersion>
158 <AssemblyVersion>2.0.0.0</AssemblyVersion>
161 <Member MemberName=".ctor">
162 <MemberSignature Language="C#" Value="public SslServerStream (System.IO.Stream stream, System.Security.Cryptography.X509Certificates.X509Certificate serverCertificate, bool clientCertificateRequired, bool ownsStream, Mono.Security.Protocol.Tls.SecurityProtocolType securityProtocolType);" />
163 <MemberType>Constructor</MemberType>
166 <Parameter Name="stream" Type="System.IO.Stream" />
167 <Parameter Name="serverCertificate" Type="System.Security.Cryptography.X509Certificates.X509Certificate" />
168 <Parameter Name="clientCertificateRequired" Type="System.Boolean" />
169 <Parameter Name="ownsStream" Type="System.Boolean" />
170 <Parameter Name="securityProtocolType" Type="Mono.Security.Protocol.Tls.SecurityProtocolType" />
173 <param name="stream">a <see cref="T:System.IO.Stream" /></param>
174 <param name="serverCertificate">a <see cref="T:System.Security.Cryptography.X509Certificates.X509Certificate" /></param>
175 <param name="clientCertificateRequired">a <see cref="T:System.Boolean" /></param>
176 <param name="ownsStream">a <see cref="T:System.Boolean" /></param>
177 <param name="securityProtocolType">a <see cref="T:System.Int32" /></param>
178 <summary>To be added</summary>
179 <remarks>To be added</remarks>
182 <AssemblyVersion>1.0.5000.0</AssemblyVersion>
183 <AssemblyVersion>2.0.0.0</AssemblyVersion>
186 <Member MemberName="CanRead">
187 <MemberSignature Language="C#" Value="public override bool CanRead { get; }" />
188 <MemberType>Property</MemberType>
190 <ReturnType>System.Boolean</ReturnType>
194 <summary>To be added</summary>
195 <value>a <see cref="T:System.Boolean" /></value>
196 <remarks>To be added</remarks>
199 <AssemblyVersion>1.0.5000.0</AssemblyVersion>
200 <AssemblyVersion>2.0.0.0</AssemblyVersion>
203 <Member MemberName="CanSeek">
204 <MemberSignature Language="C#" Value="public override bool CanSeek { get; }" />
205 <MemberType>Property</MemberType>
207 <ReturnType>System.Boolean</ReturnType>
211 <summary>To be added</summary>
212 <value>a <see cref="T:System.Boolean" /></value>
213 <remarks>To be added</remarks>
216 <AssemblyVersion>1.0.5000.0</AssemblyVersion>
217 <AssemblyVersion>2.0.0.0</AssemblyVersion>
220 <Member MemberName="CanWrite">
221 <MemberSignature Language="C#" Value="public override bool CanWrite { get; }" />
222 <MemberType>Property</MemberType>
224 <ReturnType>System.Boolean</ReturnType>
228 <summary>To be added</summary>
229 <value>a <see cref="T:System.Boolean" /></value>
230 <remarks>To be added</remarks>
233 <AssemblyVersion>1.0.5000.0</AssemblyVersion>
234 <AssemblyVersion>2.0.0.0</AssemblyVersion>
237 <Member MemberName="CheckCertRevocationStatus">
238 <MemberSignature Language="C#" Value="public bool CheckCertRevocationStatus { set; get; }" />
239 <MemberType>Property</MemberType>
241 <ReturnType>System.Boolean</ReturnType>
245 <summary>To be added</summary>
246 <value>a <see cref="T:System.Boolean" /></value>
247 <remarks>To be added</remarks>
250 <AssemblyVersion>1.0.5000.0</AssemblyVersion>
251 <AssemblyVersion>2.0.0.0</AssemblyVersion>
254 <Member MemberName="CipherAlgorithm">
255 <MemberSignature Language="C#" Value="public Mono.Security.Protocol.Tls.CipherAlgorithmType CipherAlgorithm { get; }" />
256 <MemberType>Property</MemberType>
258 <ReturnType>Mono.Security.Protocol.Tls.CipherAlgorithmType</ReturnType>
262 <summary>To be added</summary>
263 <value>a <see cref="T:Mono.Security.Protocol.Tls.CipherAlgorithmType" /></value>
264 <remarks>To be added</remarks>
267 <AssemblyVersion>1.0.5000.0</AssemblyVersion>
268 <AssemblyVersion>2.0.0.0</AssemblyVersion>
271 <Member MemberName="CipherStrength">
272 <MemberSignature Language="C#" Value="public int CipherStrength { get; }" />
273 <MemberType>Property</MemberType>
275 <ReturnType>System.Int32</ReturnType>
279 <summary>To be added</summary>
280 <value>a <see cref="T:System.Int32" /></value>
281 <remarks>To be added</remarks>
284 <AssemblyVersion>1.0.5000.0</AssemblyVersion>
285 <AssemblyVersion>2.0.0.0</AssemblyVersion>
288 <Member MemberName="ClientCertificate">
289 <MemberSignature Language="C#" Value="public System.Security.Cryptography.X509Certificates.X509Certificate ClientCertificate { get; }" />
290 <MemberType>Property</MemberType>
292 <ReturnType>System.Security.Cryptography.X509Certificates.X509Certificate</ReturnType>
296 <summary>To be added</summary>
297 <value>a <see cref="T:System.Security.Cryptography.X509Certificates.X509Certificate" /></value>
298 <remarks>To be added</remarks>
301 <AssemblyVersion>1.0.5000.0</AssemblyVersion>
302 <AssemblyVersion>2.0.0.0</AssemblyVersion>
305 <Member MemberName="ClientCertValidationDelegate">
306 <MemberSignature Language="C#" Value="public Mono.Security.Protocol.Tls.CertificateValidationCallback ClientCertValidationDelegate { set; get; }" />
307 <MemberType>Property</MemberType>
309 <ReturnType>Mono.Security.Protocol.Tls.CertificateValidationCallback</ReturnType>
313 <summary>To be added</summary>
314 <value>a <see cref="T:Mono.Security.Protocol.Tls.CertificateValidationCallback" /></value>
315 <remarks>To be added</remarks>
318 <AssemblyVersion>1.0.5000.0</AssemblyVersion>
319 <AssemblyVersion>2.0.0.0</AssemblyVersion>
322 <Member MemberName="Dispose">
323 <MemberSignature Language="C#" Value="protected override void Dispose (bool disposing);" />
324 <MemberType>Method</MemberType>
326 <ReturnType>System.Void</ReturnType>
329 <Parameter Name="disposing" Type="System.Boolean" />
332 <param name="disposing">a <see cref="T:System.Boolean" /></param>
333 <summary>To be added</summary>
334 <remarks>To be added</remarks>
337 <AssemblyVersion>1.0.5000.0</AssemblyVersion>
338 <AssemblyVersion>2.0.0.0</AssemblyVersion>
341 <Member MemberName="Finalize">
342 <MemberSignature Language="C#" Value="~SslServerStream ();" />
343 <MemberType>Method</MemberType>
345 <ReturnType>System.Void</ReturnType>
349 <summary>To be added</summary>
350 <remarks>To be added</remarks>
353 <AssemblyVersion>1.0.5000.0</AssemblyVersion>
354 <AssemblyVersion>2.0.0.0</AssemblyVersion>
357 <Member MemberName="HashAlgorithm">
358 <MemberSignature Language="C#" Value="public Mono.Security.Protocol.Tls.HashAlgorithmType HashAlgorithm { get; }" />
359 <MemberType>Property</MemberType>
361 <ReturnType>Mono.Security.Protocol.Tls.HashAlgorithmType</ReturnType>
365 <summary>To be added</summary>
366 <value>a <see cref="T:Mono.Security.Protocol.Tls.HashAlgorithmType" /></value>
367 <remarks>To be added</remarks>
370 <AssemblyVersion>1.0.5000.0</AssemblyVersion>
371 <AssemblyVersion>2.0.0.0</AssemblyVersion>
374 <Member MemberName="HashStrength">
375 <MemberSignature Language="C#" Value="public int HashStrength { get; }" />
376 <MemberType>Property</MemberType>
378 <ReturnType>System.Int32</ReturnType>
382 <summary>To be added</summary>
383 <value>a <see cref="T:System.Int32" /></value>
384 <remarks>To be added</remarks>
387 <AssemblyVersion>1.0.5000.0</AssemblyVersion>
388 <AssemblyVersion>2.0.0.0</AssemblyVersion>
391 <Member MemberName="KeyExchangeAlgorithm">
392 <MemberSignature Language="C#" Value="public Mono.Security.Protocol.Tls.ExchangeAlgorithmType KeyExchangeAlgorithm { get; }" />
393 <MemberType>Property</MemberType>
395 <ReturnType>Mono.Security.Protocol.Tls.ExchangeAlgorithmType</ReturnType>
399 <summary>To be added</summary>
400 <value>a <see cref="T:Mono.Security.Protocol.Tls.ExchangeAlgorithmType" /></value>
401 <remarks>To be added</remarks>
404 <AssemblyVersion>1.0.5000.0</AssemblyVersion>
405 <AssemblyVersion>2.0.0.0</AssemblyVersion>
408 <Member MemberName="KeyExchangeStrength">
409 <MemberSignature Language="C#" Value="public int KeyExchangeStrength { get; }" />
410 <MemberType>Property</MemberType>
412 <ReturnType>System.Int32</ReturnType>
416 <summary>To be added</summary>
417 <value>a <see cref="T:System.Int32" /></value>
418 <remarks>To be added</remarks>
421 <AssemblyVersion>1.0.5000.0</AssemblyVersion>
422 <AssemblyVersion>2.0.0.0</AssemblyVersion>
425 <Member MemberName="Length">
426 <MemberSignature Language="C#" Value="public override long Length { get; }" />
427 <MemberType>Property</MemberType>
429 <ReturnType>System.Int64</ReturnType>
433 <summary>To be added</summary>
434 <value>a <see cref="T:System.Int64" /></value>
435 <remarks>To be added</remarks>
438 <AssemblyVersion>1.0.5000.0</AssemblyVersion>
439 <AssemblyVersion>2.0.0.0</AssemblyVersion>
442 <Member MemberName="Position">
443 <MemberSignature Language="C#" Value="public override long Position { set; get; }" />
444 <MemberType>Property</MemberType>
446 <ReturnType>System.Int64</ReturnType>
450 <summary>To be added</summary>
451 <value>a <see cref="T:System.Int64" /></value>
452 <remarks>To be added</remarks>
455 <AssemblyVersion>1.0.5000.0</AssemblyVersion>
456 <AssemblyVersion>2.0.0.0</AssemblyVersion>
459 <Member MemberName="PrivateKeyCertSelectionDelegate">
460 <MemberSignature Language="C#" Value="public Mono.Security.Protocol.Tls.PrivateKeySelectionCallback PrivateKeyCertSelectionDelegate { set; get; }" />
461 <MemberType>Property</MemberType>
463 <ReturnType>Mono.Security.Protocol.Tls.PrivateKeySelectionCallback</ReturnType>
467 <summary>Set the method that can find the private key associated with a specific X.509 certificate and a host name.</summary>
468 <value>a <see cref="T:Mono.Security.Protocol.Tls.PrivateKeySelectionCallback" /></value>
469 <remarks>See <see cref="T:Mono.Security.Protocol.Tls.PrivateKeySelectionCallback" /> for an example on how to use this delegate.</remarks>
472 <AssemblyVersion>1.0.5000.0</AssemblyVersion>
473 <AssemblyVersion>2.0.0.0</AssemblyVersion>
476 <Member MemberName="SecurityProtocol">
477 <MemberSignature Language="C#" Value="public Mono.Security.Protocol.Tls.SecurityProtocolType SecurityProtocol { get; }" />
478 <MemberType>Property</MemberType>
480 <ReturnType>Mono.Security.Protocol.Tls.SecurityProtocolType</ReturnType>
484 <summary>To be added</summary>
485 <value>a <see cref="T:Mono.Security.Protocol.Tls.SecurityProtocolType" /></value>
486 <remarks>To be added</remarks>
489 <AssemblyVersion>1.0.5000.0</AssemblyVersion>
490 <AssemblyVersion>2.0.0.0</AssemblyVersion>
493 <Member MemberName="ServerCertificate">
494 <MemberSignature Language="C#" Value="public System.Security.Cryptography.X509Certificates.X509Certificate ServerCertificate { get; }" />
495 <MemberType>Property</MemberType>
497 <ReturnType>System.Security.Cryptography.X509Certificates.X509Certificate</ReturnType>
501 <summary>To be added</summary>
502 <value>a <see cref="T:System.Security.Cryptography.X509Certificates.X509Certificate" /></value>
503 <remarks>To be added</remarks>
506 <AssemblyVersion>1.0.5000.0</AssemblyVersion>
507 <AssemblyVersion>2.0.0.0</AssemblyVersion>