aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Mono
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Server.Mono')
-rw-r--r--MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj6
-rw-r--r--MediaBrowser.Server.Mono/Networking/CertificateGenerator.cs68
-rw-r--r--MediaBrowser.Server.Mono/Networking/NetworkManager.cs16
-rw-r--r--MediaBrowser.Server.Mono/Program.cs2
4 files changed, 88 insertions, 4 deletions
diff --git a/MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj b/MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj
index e780f447f..232caba4f 100644
--- a/MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj
+++ b/MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj
@@ -57,6 +57,11 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Mono.Posix.4.0.0.0\lib\net40\Mono.Posix.dll</HintPath>
</Reference>
+ <Reference Include="Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\ThirdParty\Mono.Security\Mono.Security.dll</HintPath>
+ <Private>False</Private>
+ </Reference>
<Reference Include="System" />
<Reference Include="ServiceStack.Interfaces">
<HintPath>..\ThirdParty\ServiceStack\ServiceStack.Interfaces.dll</HintPath>
@@ -70,6 +75,7 @@
<Link>Properties\SharedVersion.cs</Link>
</Compile>
<Compile Include="Native\BaseMonoApp.cs" />
+ <Compile Include="Networking\CertificateGenerator.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Native\NativeApp.cs" />
diff --git a/MediaBrowser.Server.Mono/Networking/CertificateGenerator.cs b/MediaBrowser.Server.Mono/Networking/CertificateGenerator.cs
new file mode 100644
index 000000000..6e37322cb
--- /dev/null
+++ b/MediaBrowser.Server.Mono/Networking/CertificateGenerator.cs
@@ -0,0 +1,68 @@
+using MediaBrowser.Model.Logging;
+using Mono.Security.X509;
+using System;
+using System.Collections;
+using System.Security.Cryptography;
+
+namespace MediaBrowser.Server.Mono.Networking
+{
+ internal class CertificateGenerator
+ {
+ private const string MonoTestRootAgency = "<RSAKeyValue><Modulus>v/4nALBxCE+9JgEC0LnDUvKh6e96PwTpN4Rj+vWnqKT7IAp1iK/JjuqvAg6DQ2vTfv0dTlqffmHH51OyioprcT5nzxcSTsZb/9jcHScG0s3/FRIWnXeLk/fgm7mSYhjUaHNI0m1/NTTktipicjKxo71hGIg9qucCWnDum+Krh/k=</Modulus><Exponent>AQAB</Exponent><P>9jbKxMXEruW2CfZrzhxtull4O8P47+mNsEL+9gf9QsRO1jJ77C+jmzfU6zbzjf8+ViK+q62tCMdC1ZzulwdpXQ==</P><Q>x5+p198l1PkK0Ga2mRh0SIYSykENpY2aLXoyZD/iUpKYAvATm0/wvKNrE4dKJyPCA+y3hfTdgVag+SP9avvDTQ==</Q><DP>ISSjCvXsUfbOGG05eddN1gXxL2pj+jegQRfjpk7RAsnWKvNExzhqd5x+ZuNQyc6QH5wxun54inP4RTUI0P/IaQ==</DP><DQ>R815VQmR3RIbPqzDXzv5j6CSH6fYlcTiQRtkBsUnzhWmkd/y3XmamO+a8zJFjOCCx9CcjpVuGziivBqi65lVPQ==</DQ><InverseQ>iYiu0KwMWI/dyqN3RJYUzuuLj02/oTD1pYpwo2rvNCXU1Q5VscOeu2DpNg1gWqI+1RrRCsEoaTNzXB1xtKNlSw==</InverseQ><D>nIfh1LYF8fjRBgMdAH/zt9UKHWiaCnc+jXzq5tkR8HVSKTVdzitD8bl1JgAfFQD8VjSXiCJqluexy/B5SGrCXQ49c78NIQj0hD+J13Y8/E0fUbW1QYbhj6Ff7oHyhaYe1WOQfkp2t/h+llHOdt1HRf7bt7dUknYp7m8bQKGxoYE=</D></RSAKeyValue>";
+
+ internal static void CreateSelfSignCertificatePfx(
+ string fileName,
+ string hostname,
+ ILogger logger)
+ {
+ if (string.IsNullOrWhiteSpace(fileName))
+ {
+ throw new ArgumentNullException("fileName");
+ }
+
+ byte[] sn = Guid.NewGuid().ToByteArray();
+ string subject = string.Format("CN={0}", hostname);
+ string issuer = subject;
+ DateTime notBefore = DateTime.Now.AddDays(-2);
+ DateTime notAfter = DateTime.Now.AddYears(10);
+
+ RSA issuerKey = RSA.Create();
+ issuerKey.FromXmlString(MonoTestRootAgency);
+ RSA subjectKey = RSA.Create();
+
+ // serial number MUST be positive
+ if ((sn[0] & 0x80) == 0x80)
+ sn[0] -= 0x80;
+
+ issuer = subject;
+ issuerKey = subjectKey;
+
+ X509CertificateBuilder cb = new X509CertificateBuilder(3);
+ cb.SerialNumber = sn;
+ cb.IssuerName = issuer;
+ cb.NotBefore = notBefore;
+ cb.NotAfter = notAfter;
+ cb.SubjectName = subject;
+ cb.SubjectPublicKey = subjectKey;
+
+ // signature
+ cb.Hash = "SHA256";
+ byte[] rawcert = cb.Sign(issuerKey);
+
+ PKCS12 p12 = new PKCS12();
+
+
+ ArrayList list = new ArrayList();
+ // we use a fixed array to avoid endianess issues
+ // (in case some tools requires the ID to be 1).
+ list.Add(new byte[4] { 1, 0, 0, 0 });
+ Hashtable attributes = new Hashtable(1);
+ attributes.Add(PKCS9.localKeyId, list);
+
+ p12.AddCertificate(new X509Certificate(rawcert), attributes);
+
+ p12.AddPkcs8ShroudedKeyBag(subjectKey, attributes);
+ p12.SaveToFile(fileName);
+ }
+ }
+}
diff --git a/MediaBrowser.Server.Mono/Networking/NetworkManager.cs b/MediaBrowser.Server.Mono/Networking/NetworkManager.cs
index 60c250115..e8c623fd1 100644
--- a/MediaBrowser.Server.Mono/Networking/NetworkManager.cs
+++ b/MediaBrowser.Server.Mono/Networking/NetworkManager.cs
@@ -24,16 +24,26 @@ namespace MediaBrowser.Server.Mono.Networking
/// <returns>IEnumerable{NetworkShare}.</returns>
public IEnumerable<NetworkShare> GetNetworkShares(string path)
{
- return new List<NetworkShare> ();
+ return new List<NetworkShare>();
}
/// <summary>
/// Gets available devices within the domain
/// </summary>
/// <returns>PC's in the Domain</returns>
- public IEnumerable<FileSystemEntryInfo> GetNetworkDevices()
+ public IEnumerable<FileSystemEntryInfo> GetNetworkDevices()
{
- return new List<FileSystemEntryInfo> ();
+ return new List<FileSystemEntryInfo>();
+ }
+
+ /// <summary>
+ /// Generates a self signed certificate at the locatation specified by <paramref name="certificatePath"/>.
+ /// </summary>
+ /// <param name="certificatePath">The path to generate the certificate.</param>
+ /// <param name="hostname">The common name for the certificate.</param>
+ public void GenerateSelfSignedSslCertificate(string certificatePath, string hostname)
+ {
+ CertificateGenerator.CreateSelfSignCertificatePfx(certificatePath, hostname, Logger);
}
}
}
diff --git a/MediaBrowser.Server.Mono/Program.cs b/MediaBrowser.Server.Mono/Program.cs
index 1cd0b5ae6..10a6c6fb9 100644
--- a/MediaBrowser.Server.Mono/Program.cs
+++ b/MediaBrowser.Server.Mono/Program.cs
@@ -78,7 +78,7 @@ namespace MediaBrowser.Server.Mono
var nativeApp = new NativeApp();
- _appHost = new ApplicationHost(appPaths, logManager, options, fileSystem, "MBServer.Mono", false, nativeApp);
+ _appHost = new ApplicationHost(appPaths, logManager, options, fileSystem, "MBServer.Mono", nativeApp);
if (options.ContainsOption("-v")) {
Console.WriteLine (_appHost.ApplicationVersion.ToString());