1 // This source code is dual-licensed under the Apache License, version 2 // 2.0, and the Mozilla Public License, version 1.1. 3 // 4 // The APL v2.0: 5 // 6 //--------------------------------------------------------------------------- 7 // Copyright (C) 2007-2010 LShift Ltd., Cohesive Financial 8 // Technologies LLC., and Rabbit Technologies Ltd. 9 // 10 // Licensed under the Apache License, Version 2.0 (the "License"); 11 // you may not use this file except in compliance with the License. 12 // You may obtain a copy of the License at 13 // 14 // http://www.apache.org/licenses/LICENSE-2.0 15 // 16 // Unless required by applicable law or agreed to in writing, software 17 // distributed under the License is distributed on an "AS IS" BASIS, 18 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 19 // See the License for the specific language governing permissions and 20 // limitations under the License. 21 //--------------------------------------------------------------------------- 22 // 23 // The MPL v1.1: 24 // 25 //--------------------------------------------------------------------------- 26 // The contents of this file are subject to the Mozilla Public License 27 // Version 1.1 (the "License"); you may not use this file except in 28 // compliance with the License. You may obtain a copy of the License at 29 // http://www.rabbitmq.com/mpl.html 30 // 31 // Software distributed under the License is distributed on an "AS IS" 32 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the 33 // License for the specific language governing rights and limitations 34 // under the License. 35 // 36 // The Original Code is The RabbitMQ .NET Client. 37 // 38 // The Initial Developers of the Original Code are LShift Ltd, 39 // Cohesive Financial Technologies LLC, and Rabbit Technologies Ltd. 40 // 41 // Portions created before 22-Nov-2008 00:00:00 GMT by LShift Ltd, 42 // Cohesive Financial Technologies LLC, or Rabbit Technologies Ltd 43 // are Copyright (C) 2007-2008 LShift Ltd, Cohesive Financial 44 // Technologies LLC, and Rabbit Technologies Ltd. 45 // 46 // Portions created by LShift Ltd are Copyright (C) 2007-2010 LShift 47 // Ltd. Portions created by Cohesive Financial Technologies LLC are 48 // Copyright (C) 2007-2010 Cohesive Financial Technologies 49 // LLC. Portions created by Rabbit Technologies Ltd are Copyright 50 // (C) 2007-2010 Rabbit Technologies Ltd. 51 // 52 // All Rights Reserved. 53 // 54 // Contributor(s): ______________________________________. 55 // 56 //--------------------------------------------------------------------------- 57 using System; 58 using System.Collections; 59 using System.Net.Security; 60 using System.Security.Authentication; 61 using System.Security.Cryptography.X509Certificates; 62 using RabbitMQ.Client.Impl; 63 64 namespace RabbitMQ.Client 65 { 66 ///<summary>Represents a configurable SSL option, used 67 ///in setting up an SSL connection.</summary> 68 public class SslOption 69 { 70 71 private bool m_enabled; 72 73 ///<summary>Flag specifying if Ssl should indeed be 74 ///used</summary> 75 public bool Enabled 76 { 77 get { return m_enabled; } 78 set { m_enabled = value; } 79 } 80 81 82 private SslProtocols m_version = SslProtocols.Ssl3; 83 84 ///<summary>Retrieve or set the Ssl protocol version 85 ///</summary> 86 public SslProtocols Version 87 { 88 get { return m_version; } 89 set { m_version = value; } 90 } 91 92 private string m_certPath; 93 94 ///<summary>Retrieve or set the path to client certificate. 95 ///</summary> 96 public string CertPath 97 { 98 get { return m_certPath; } 99 set { m_certPath = value; } 100 } 101 102 private string m_certPass; 103 104 ///<summary>Retrieve or set the path to client certificate. 105 ///</summary> 106 public string CertPassphrase 107 { 108 get { return m_certPass; } 109 set { m_certPass = value; } 110 } 111 112 113 ///<summary>Convenience read-only property to retrieve an X509CertificateCollection 114 ///containing the client certificate</summary> 115 public X509CertificateCollection Certs 116 { 117 get { 118 if(m_certPath == "") { 119 return null; 120 } else { 121 X509CertificateCollection c = new X509CertificateCollection(); 122 c.Add(new X509Certificate2(m_certPath, m_certPass)); 123 return c; 124 } 125 } 126 } 127 128 private string m_serverName; 129 130 ///<summary>Retrieve or set server's Canonical Name. This MUST match the CN 131 ///on the Certificate else the SSL connection will fail</summary> 132 public string ServerName 133 { 134 get { return m_serverName; } 135 set { m_serverName = value; } 136 } 137 138 private SslPolicyErrors m_acceptablePolicyErrors = SslPolicyErrors.None; 139 140 ///<summary>Retrieve or set the set of ssl policy errors that 141 ///are deemed acceptable</summary> 142 public SslPolicyErrors AcceptablePolicyErrors 143 { 144 get { return m_acceptablePolicyErrors; } 145 set { m_acceptablePolicyErrors = value; } 146 } 147 148 149 ///<summary>Construct an SslOption specifying both the server cannonical name 150 ///and the client's certificate path. 151 ///</summary> SslOption(string serverName, string certPath, bool enabled)152 public SslOption(string serverName, string certPath, bool enabled) 153 { 154 m_serverName= serverName; 155 m_certPath = certPath; 156 m_enabled = enabled; 157 } 158 159 ///<summary>Construct an SslOption with just the server cannonical name. 160 ///The Certificate path is set to an empty string 161 ///</summary> SslOption(string serverName)162 public SslOption(string serverName): this(serverName, "", false) 163 { 164 } 165 166 ///<summary>Construct an SslOption with no parameters set</summary> SslOption()167 public SslOption(): this("", "", false) 168 { 169 } 170 171 } 172 } 173