public GcmXmppConnection(GcmXmppConfiguration configuration) { authCompletion = new TaskCompletionSource <bool> (); notifications = new Dictionary <string, CompletableNotification> (); Configuration = configuration; certificates = new X509CertificateCollection(); // Add local/machine certificate stores to our collection if requested //if (Configuration.AddLocalAndMachineCertificateStores) { var store = new X509Store(StoreLocation.LocalMachine); certificates.AddRange(store.Certificates); store = new X509Store(StoreLocation.CurrentUser); certificates.AddRange(store.Certificates); //} // Add optionally specified additional certs into our collection // if (Configuration.AdditionalCertificates != null) { // foreach (var addlCert in Configuration.AdditionalCertificates) // certificates.Add (addlCert); // } // Finally, add the main private cert for authenticating to our collection // if (certificate != null) // certificates.Add (certificate); }
public ApplePushChannel(ApplePushChannelSettings channelSettings, PushServiceSettings serviceSettings = null) : base(channelSettings, serviceSettings) { this.appleSettings = channelSettings; certificate = this.appleSettings.Certificate; certificates = new X509CertificateCollection(); if (appleSettings.AddLocalAndMachineCertificateStores) { var store = new X509Store(StoreLocation.LocalMachine); certificates.AddRange(store.Certificates); store = new X509Store(StoreLocation.CurrentUser); certificates.AddRange(store.Certificates); } certificates.Add(certificate); if (this.appleSettings.AdditionalCertificates != null) { foreach (var addlCert in this.appleSettings.AdditionalCertificates) { certificates.Add(addlCert); } } //Start our cleanup task taskCleanup = new Task(() => Cleanup(), TaskCreationOptions.LongRunning); taskCleanup.ContinueWith((t) => { var ex = t.Exception; }, TaskContinuationOptions.OnlyOnFaulted); taskCleanup.Start(); }
public ApplePushChannel(ApplePushChannelSettings channelSettings) { cancelToken = cancelTokenSrc.Token; appleSettings = channelSettings; certificate = this.appleSettings.Certificate; certificates = new X509CertificateCollection(); if (appleSettings.AddLocalAndMachineCertificateStores) { var store = new X509Store(StoreLocation.LocalMachine); certificates.AddRange(store.Certificates); store = new X509Store(StoreLocation.CurrentUser); certificates.AddRange(store.Certificates); } certificates.Add(certificate); if (this.appleSettings.AdditionalCertificates != null) { foreach (var addlCert in this.appleSettings.AdditionalCertificates) { certificates.Add(addlCert); } } timerCleanup = new Timer(state => Cleanup(), null, TimeSpan.FromMilliseconds(1000), TimeSpan.FromMilliseconds(1000)); }
private void ConfigureCertificates() { _certificate = _appleSettings.Certificate; _certificates = new X509CertificateCollection(); if (_appleSettings.AddLocalAndMachineCertificateStores) { var store = new X509Store(StoreLocation.LocalMachine); _certificates.AddRange(store.Certificates); store = new X509Store(StoreLocation.CurrentUser); _certificates.AddRange(store.Certificates); } _certificates.Add(_certificate); if (_appleSettings.AdditionalCertificates != null) { foreach (var additionalCertificate in _appleSettings.AdditionalCertificates) { _certificates.Add(additionalCertificate); } } }
public ApnsHttp2Connection(ApnsHttp2Configuration configuration) { id = ++ID; if (id >= int.MaxValue) { ID = 0; } Configuration = configuration; certificate = Configuration.Certificate; certificates = new X509CertificateCollection(); // Add local/machine certificate stores to our collection if requested if (Configuration.AddLocalAndMachineCertificateStores) { var store = new X509Store(StoreLocation.LocalMachine); certificates.AddRange(store.Certificates); store = new X509Store(StoreLocation.CurrentUser); certificates.AddRange(store.Certificates); } // Add optionally specified additional certs into our collection if (Configuration.AdditionalCertificates != null) { foreach (var addlCert in Configuration.AdditionalCertificates) { certificates.Add(addlCert); } } // Finally, add the main private cert for authenticating to our collection if (certificate != null) { certificates.Add(certificate); } #if NET45 var httpHandler = new WebRequestHandler { ClientCertificateOptions = ClientCertificateOption.Manual }; httpHandler.ClientCertificates.AddRange(certificates); #else var httpHandler = new HttpClientHandler { ClientCertificateOptions = ClientCertificateOption.Manual }; httpHandler.ClientCertificates.AddRange(certificates); #endif httpClient = new HttpClient(httpHandler) { BaseAddress = new Uri(string.Format("https://{0}:{1}", Configuration.Host, Configuration.Port)) }; }
public ApnsConnection(ApnsConfiguration configuration) { id = ++ID; if (id >= int.MaxValue) { ID = 0; } Configuration = configuration; certificate = Configuration.Certificate; certificates = new X509CertificateCollection(); // Add local/machine certificate stores to our collection if requested if (Configuration.AddLocalAndMachineCertificateStores) { var store = new X509Store(StoreLocation.LocalMachine); certificates.AddRange(store.Certificates); store = new X509Store(StoreLocation.CurrentUser); certificates.AddRange(store.Certificates); } // Add optionally specified additional certs into our collection if (Configuration.AdditionalCertificates != null) { foreach (var addlCert in Configuration.AdditionalCertificates) { certificates.Add(addlCert); } } // Finally, add the main private cert for authenticating to our collection if (certificate != null) { certificates.Add(certificate); } timerBatchWait = new Timer(new TimerCallback(async state => { await batchSendSemaphore.WaitAsync(); try { await SendBatch().ConfigureAwait(false); } catch (Exception exception) { //ignore } finally { batchSendSemaphore.Release(); } }), null, Timeout.Infinite, Timeout.Infinite); }
/// <summary> /// Retrieve client SSL certificates. Dependent on connection string /// settings we use either file or store based certificates. /// </summary> private X509CertificateCollection GetClientCertificates() { X509CertificateCollection certs = new X509CertificateCollection(); // Check for file-based certificate if (Settings.CertificateFile != null) { if (!Version.isAtLeast(5, 1, 0)) { throw new MySqlException("Properties.Resources.FileBasedCertificateNotSupported"); } X509Certificate2 clientCert = new X509Certificate2(Settings.CertificateFile, Settings.CertificatePassword); certs.Add(clientCert); return(certs); } if (Settings.CertificateStoreLocation == MySqlCertificateStoreLocation.None) { return(certs); } StoreLocation location = (Settings.CertificateStoreLocation == MySqlCertificateStoreLocation.CurrentUser) ? StoreLocation.CurrentUser : StoreLocation.LocalMachine; // Check for store-based certificate X509Store store = new X509Store(StoreName.My, location); store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly); if (Settings.CertificateThumbprint == null) { // Return all certificates from the store. certs.AddRange(store.Certificates); return(certs); } // Find certificate with given thumbprint certs.AddRange(store.Certificates.Find(X509FindType.FindByThumbprint, Settings.CertificateThumbprint, true)); if (certs.Count == 0) { throw new MySqlException("Certificate with Thumbprint " + Settings.CertificateThumbprint + " not found"); } return(certs); }
public void AddRange_Array() { X509CertificateCollection c = new X509CertificateCollection(); c.AddRange(range); Assert.AreEqual(2, c.Count, "Range(a+b)"); c.AddRange(range); Assert.AreEqual(4, c.Count, "Duplicate(a+b)"); c.Add(x509c); Assert.AreEqual(5, c.Count, "New(c)"); }
static X509CertificateCollection LoadCertificates(string filename) { X509Certificate x509 = null; X509CertificateCollection coll = new X509CertificateCollection(); switch (Path.GetExtension(filename).ToUpper()) { case ".P7B": case ".SPC": SoftwarePublisherCertificate spc = SoftwarePublisherCertificate.CreateFromFile(filename); coll.AddRange(spc.Certificates); spc = null; break; case ".CER": case ".CRT": using (FileStream fs = File.OpenRead(filename)) { byte[] data = new byte [fs.Length]; fs.Read(data, 0, data.Length); if (data [0] != 0x30) { // maybe it's ASCII PEM base64 encoded ? data = PEM("CERTIFICATE", data); } if (data != null) { x509 = new X509Certificate(data); } } if (x509 != null) { coll.Add(x509); } break; case ".P12": case ".PFX": // TODO - support PKCS12 with passwords PKCS12 p12 = PKCS12.LoadFromFile(filename); coll.AddRange(p12.Certificates); p12 = null; break; default: Console.WriteLine("Unknown file extension: {0}", Path.GetExtension(filename)); break; } return(coll); }
public void AddRange_CollectionNull() { X509CertificateCollection coll = null; X509CertificateCollection c = new X509CertificateCollection(); c.AddRange(coll); }
public void AddRange_ArrayNull() { X509Certificate[] array = null; X509CertificateCollection c = new X509CertificateCollection(); c.AddRange(array); }
public ApnsHttp2Connection(ApnsHttp2Configuration configuration) { id = ++ID; if (id >= int.MaxValue) { ID = 0; } Configuration = configuration; certificate = Configuration.Certificate; certificates = new X509CertificateCollection(); // Add local/machine certificate stores to our collection if requested if (Configuration.AddLocalAndMachineCertificateStores) { var store = new X509Store(StoreLocation.LocalMachine); certificates.AddRange(store.Certificates); store = new X509Store(StoreLocation.CurrentUser); certificates.AddRange(store.Certificates); } // Add optionally specified additional certs into our collection if (Configuration.AdditionalCertificates != null) { foreach (var addlCert in Configuration.AdditionalCertificates) { certificates.Add(addlCert); } } // Finally, add the main private cert for authenticating to our collection if (certificate != null) { certificates.Add(certificate); } var http2Settings = new HttpTwo.Http2ConnectionSettings( Configuration.Host, (uint)Configuration.Port, true, certificates); http2 = new HttpTwo.Http2Client(http2Settings); }
public void CopyTo_TooSmall() { X509Certificate[] array = new X509Certificate [1]; X509CertificateCollection c = new X509CertificateCollection(); c.AddRange(range); c.CopyTo(array, 0); }
public void AddRange_Collection() { X509CertificateCollection coll = new X509CertificateCollection(range); X509CertificateCollection c = new X509CertificateCollection(); c.AddRange(c); Assert.AreEqual(0, c.Count, "Self(none)"); c.AddRange(coll); Assert.AreEqual(2, c.Count, "Range(a+b)"); c.AddRange(coll); Assert.AreEqual(4, c.Count, "Duplicate(a+b)"); c.Add(x509c); Assert.AreEqual(5, c.Count, "New(c)"); // This leads to an infinite loop until the runtime throws an OutOfMemoryException //c.AddRange (c); //Assert.AreEqual (10, c.Count, "Self(double)"); }
private X509CertificateCollection GetClientCertificates() { X509CertificateCollection x509CertificateCollection = new X509CertificateCollection(); if (this.Settings.CertificateFile != null) { if (!this.Version.isAtLeast(5, 1, 0)) { throw new MySqlException(Resources.FileBasedCertificateNotSupported); } X509Certificate2 value = new X509Certificate2(this.Settings.CertificateFile, this.Settings.CertificatePassword); x509CertificateCollection.Add(value); return(x509CertificateCollection); } else { if (this.Settings.CertificateStoreLocation == MySqlCertificateStoreLocation.None) { return(x509CertificateCollection); } StoreLocation storeLocation = (this.Settings.CertificateStoreLocation == MySqlCertificateStoreLocation.CurrentUser) ? StoreLocation.CurrentUser : StoreLocation.LocalMachine; X509Store x509Store = new X509Store(StoreName.My, storeLocation); x509Store.Open(OpenFlags.OpenExistingOnly); if (this.Settings.CertificateThumbprint == null) { x509CertificateCollection.AddRange(x509Store.Certificates); return(x509CertificateCollection); } x509CertificateCollection.AddRange(x509Store.Certificates.Find(X509FindType.FindByThumbprint, this.Settings.CertificateThumbprint, true)); if (x509CertificateCollection.Count == 0) { throw new MySqlException("Certificate with Thumbprint " + this.Settings.CertificateThumbprint + " not found"); } return(x509CertificateCollection); } }
private X509CertificateCollection BuildBagOfCerts() { X509CertificateCollection collection = new X509CertificateCollection(); if (this.KeyInfo != null) { foreach (KeyInfoClause clause in this.KeyInfo) { KeyInfoX509Data x509Data = clause as KeyInfoX509Data; if (x509Data != null) { collection.AddRange(Utils.BuildBagOfCerts(x509Data, CertUsageType.Verification)); } } } return(collection); }
public void open() { try { X509Store store = new X509Store(StoreLocation.LocalMachine); store.Open(OpenFlags.ReadOnly); X509CertificateCollection certificates = new X509CertificateCollection(); certificates.AddRange(store.Certificates); client = new TcpClient(); client.Connect("gateway.sandbox.push.apple.com", 2195); LocalCertificateSelectionCallback localCallBack = new LocalCertificateSelectionCallback(APNSLocalCert.SelectLocalCertificate); stream = new SslStream(client.GetStream(), false, (sender, cert, chain, sslPolicyErrors) => true, localCallBack); stream.AuthenticateAsClient("gateway.sandbox.push.apple.com", certificates, System.Security.Authentication.SslProtocols.Tls, false); } catch (Exception ex) { Console.Write(ex.Message); } }
static X509CertificateCollection LoadCertificates (string filename) { X509Certificate x509 = null; X509CertificateCollection coll = new X509CertificateCollection (); switch (Path.GetExtension (filename).ToUpper ()) { case ".P7B": case ".SPC": SoftwarePublisherCertificate spc = SoftwarePublisherCertificate.CreateFromFile (filename); coll.AddRange (spc.Certificates); spc = null; break; case ".CER": case ".CRT": using (FileStream fs = File.OpenRead (filename)) { byte[] data = new byte [fs.Length]; fs.Read (data, 0, data.Length); if (data [0] != 0x30) { // maybe it's ASCII PEM base64 encoded ? data = PEM ("CERTIFICATE", data); } if (data != null) x509 = new X509Certificate (data); } if (x509 != null) coll.Add (x509); break; case ".P12": case ".PFX": // TODO - support PKCS12 with passwords PKCS12 p12 = PKCS12.LoadFromFile (filename); coll.AddRange (p12.Certificates); p12 = null; break; default: Console.WriteLine ("Unknown file extension: {0}", Path.GetExtension (filename)); break; } return coll; }
/// <summary> /// Retrieves a collection containing the client SSL PFX certificates. /// </summary> /// <remarks>Dependent on connection string settings. /// Either file or store based certificates are used.</remarks> private X509CertificateCollection GetPFXClientCertificates() { X509CertificateCollection certs = new X509CertificateCollection(); // Check for file-based certificate if (_settings.CertificateFile != null) { X509Certificate2 clientCert = new X509Certificate2(_settings.CertificateFile, _settings.CertificatePassword); certs.Add(clientCert); return(certs); } if (_settings.CertificateStoreLocation == MySqlCertificateStoreLocation.None) { return(certs); } StoreLocation location = (_settings.CertificateStoreLocation == MySqlCertificateStoreLocation.CurrentUser) ? StoreLocation.CurrentUser : StoreLocation.LocalMachine; try { // Check for store-based certificate X509Store store = new X509Store(StoreName.My, location); store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly); if (_settings.CertificateThumbprint == null) { // Return all certificates from the store. certs.AddRange(store.Certificates); if (certs.Count == 0) { throw new MySqlException("No certificates were found in the certificate store"); } return(certs); } else { bool validateCert = _settings.SslMode == MySqlSslMode.VerifyCA || _settings.SslMode == MySqlSslMode.VerifyFull; // Find certificate with given thumbprint certs.AddRange(store.Certificates.Find(X509FindType.FindByThumbprint, _settings.CertificateThumbprint, validateCert)); if (certs.Count == 0) { throw new MySqlException(String.Format(Resources.InvalidCertificateThumbprint, _settings.CertificateThumbprint)); } return(certs); } } catch (CryptographicException ex) { throw new MySqlException("Certificate couldn't be loaded from the CertificateStoreLocation", ex); } }
public static void X509CertificateCollectionThrowsArgumentNullException() { using (X509Certificate certificate = new X509Certificate()) { Assert.Throws<ArgumentNullException>(() => new X509CertificateCollection((X509Certificate[])null)); Assert.Throws<ArgumentNullException>(() => new X509CertificateCollection((X509CertificateCollection)null)); X509CertificateCollection collection = new X509CertificateCollection { certificate }; Assert.Throws<ArgumentNullException>(() => collection[0] = null); Assert.Throws<ArgumentNullException>(() => collection.Add(null)); Assert.Throws<ArgumentNullException>(() => collection.AddRange((X509Certificate[])null)); Assert.Throws<ArgumentNullException>(() => collection.AddRange((X509CertificateCollection)null)); Assert.Throws<ArgumentNullException>(() => collection.CopyTo(null, 0)); Assert.Throws<ArgumentNullException>(() => collection.Insert(0, null)); Assert.Throws<ArgumentNullException>(() => collection.Remove(null)); IList ilist = (IList)collection; Assert.Throws<ArgumentNullException>(() => ilist[0] = null); Assert.Throws<ArgumentNullException>(() => ilist.Add(null)); Assert.Throws<ArgumentNullException>(() => ilist.CopyTo(null, 0)); Assert.Throws<ArgumentNullException>(() => ilist.Insert(0, null)); Assert.Throws<ArgumentNullException>(() => ilist.Remove(null)); } Assert.Throws<ArgumentNullException>(() => new X509CertificateCollection.X509CertificateEnumerator(null)); }
public X509CertificateCollection Install(IFirebaseAppPlatform app) { if (!InstallRootCerts.InstallationRequired) { return(null); } object sync = InstallRootCerts.Sync; X509CertificateCollection result; lock (sync) { X509CertificateCollection x509CertificateCollection; if (InstallRootCerts._installedRoots.TryGetValue(app, out x509CertificateCollection)) { result = x509CertificateCollection; } else { x509CertificateCollection = new X509CertificateCollection(); string text = Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), ".mono"), "certs"); bool flag = false; try { flag = (Directory.Exists(text) || Directory.CreateDirectory(text) != null); } catch (Exception) { } if (!flag) { string writeablePath = Services.AppConfig.GetWriteablePath(app); if (!string.IsNullOrEmpty(writeablePath)) { Services.Logging.LogMessage(PlatformLogLevel.Debug, string.Format("Saving root certs in {0} ({1} is not writable)", writeablePath, text)); Environment.SetEnvironmentVariable("XDG_CONFIG_HOME", writeablePath); text = writeablePath; this.HackRefreshMonoRootStore(); } } X509CertificateCollection value = InstallRootCerts.DecodeDefaultCollection(); X509CertificateCollection x509CertificateCollection2 = InstallRootCerts.DecodeCollection(app); if (string.Equals(app.Name, FirebaseHandler.AppUtils.GetDefaultInstanceName())) { x509CertificateCollection2.AddRange(value); x509CertificateCollection = x509CertificateCollection2; } else { x509CertificateCollection.AddRange(value); } InstallRootCerts._installedRoots[app] = x509CertificateCollection2; if (x509CertificateCollection.Count == 0) { result = x509CertificateCollection; } else { InstallRootCerts.InstallDefaultCRLs("Firebase.Platform.cacrl_pem.txt", Path.Combine(text, InstallRootCerts.TrustedRoot)); InstallRootCerts.InstallDefaultCRLs("Firebase.Platform.caintermediatecrl_pem.txt", Path.Combine(text, InstallRootCerts.IntermediateCA)); Services.Logging.LogMessage(PlatformLogLevel.Debug, string.Format("Installing {0} certs", x509CertificateCollection2.Count)); X509Store x509Store = new X509Store(InstallRootCerts.TrustedRoot); x509Store.Open(OpenFlags.ReadWrite); X509CertificateCollection certificates = x509Store.Certificates; X509CertificateCollection.X509CertificateEnumerator enumerator = x509CertificateCollection.GetEnumerator(); try { while (enumerator.MoveNext()) { X509Certificate current = enumerator.Current; if (!certificates.Contains(current)) { try { x509Store.Add((X509Certificate2)current); } catch (Exception ex) { Services.Logging.LogMessage(PlatformLogLevel.Error, ex.ToString()); } } } } finally { IDisposable disposable; if ((disposable = (enumerator as IDisposable)) != null) { disposable.Dispose(); } } x509Store.Close(); result = x509CertificateCollection; } } } return(result); }
static X509CertificateCollection LoadCertificates (string filename, string password, bool verbose) { X509Certificate x509 = null; X509CertificateCollection coll = new X509CertificateCollection (); switch (Path.GetExtension (filename).ToUpper ()) { case ".P7B": case ".SPC": SoftwarePublisherCertificate spc = SoftwarePublisherCertificate.CreateFromFile (filename); coll.AddRange (spc.Certificates); spc = null; break; case ".CER": case ".CRT": using (FileStream fs = File.OpenRead (filename)) { byte[] data = new byte [fs.Length]; fs.Read (data, 0, data.Length); if (data [0] != 0x30) { // maybe it's ASCII PEM base64 encoded ? data = PEM ("CERTIFICATE", data); } if (data != null) x509 = new X509Certificate (data); } if (x509 != null) coll.Add (x509); break; case ".P12": case ".PFX": PKCS12 p12 = password == null ? PKCS12.LoadFromFile (filename) : PKCS12.LoadFromFile (filename, password); X509CertificateCollection tmp = new X509CertificateCollection (p12.Certificates); for (int i = 0; i != p12.Keys.Count; i++) { X509Certificate cert = p12.Certificates[i]; RSACryptoServiceProvider pk = p12.Keys[i] as RSACryptoServiceProvider; if (pk == null || pk.PublicOnly) continue; if (verbose) Console.WriteLine ("Found key for certificate: {0}", cert.SubjectName); tmp[0].RSA = pk; } coll.AddRange(tmp); p12 = null; break; default: Console.WriteLine ("Unknown file extension: {0}", Path.GetExtension (filename)); break; } return coll; }
static X509CertificateCollection LoadCertificates(string filename, string password, bool verbose) { X509Certificate x509 = null; X509CertificateCollection coll = new X509CertificateCollection(); switch (Path.GetExtension(filename).ToUpper()) { case ".P7B": case ".SPC": SoftwarePublisherCertificate spc = SoftwarePublisherCertificate.CreateFromFile(filename); coll.AddRange(spc.Certificates); spc = null; break; case ".CER": case ".CRT": using (FileStream fs = File.OpenRead(filename)) { byte[] data = new byte [fs.Length]; fs.Read(data, 0, data.Length); if (data [0] != 0x30) { // maybe it's ASCII PEM base64 encoded ? data = PEM("CERTIFICATE", data); } if (data != null) { x509 = new X509Certificate(data); } } if (x509 != null) { coll.Add(x509); } break; case ".P12": case ".PFX": PKCS12 p12 = password == null?PKCS12.LoadFromFile(filename) : PKCS12.LoadFromFile(filename, password); X509CertificateCollection tmp = new X509CertificateCollection(p12.Certificates); for (int i = 0; i != p12.Keys.Count; i++) { X509Certificate cert = p12.Certificates[i]; RSACryptoServiceProvider pk = p12.Keys[i] as RSACryptoServiceProvider; if (pk == null || pk.PublicOnly) { continue; } if (verbose) { Console.WriteLine("Found key for certificate: {0}", cert.SubjectName); } tmp[0].RSA = pk; } coll.AddRange(tmp); p12 = null; break; default: Console.WriteLine("Unknown file extension: {0}", Path.GetExtension(filename)); break; } return(coll); }