Beispiel #1
0
        private void GenerateSigningRequestViaOpenSSL(string TargetCertRequestFileName, AsymmetricCipherKeyPair KeyPair)
        {
            // We expect openssl.exe to exist in the same directory as iPhonePackager
            string OpenSSLPath = Path.GetDirectoryName(Application.ExecutablePath) + @"\openssl.exe";

            if (!File.Exists(OpenSSLPath))
            {
                MessageBox.Show("A version of OpenSSL is required to generate certificate requests.  Please place OpenSSL.exe in Binaries\\DotNET\\IOS", Config.AppDisplayName, MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            string EffectiveBuildPath = (Program.GameName.Length > 0) ? Config.BuildDirectory : Path.GetFullPath(".");

            // Create a temporary file to write the key pair out to (in a format that OpenSSL understands)
            string     KeyFileName = Path.GetTempFileName();
            TextWriter KeyWriter   = new StreamWriter(KeyFileName);

            PemWriter KeyWriterPEM = new PemWriter(KeyWriter);

            KeyWriterPEM.WriteObject(KeyPair);
            KeyWriter.Close();

            // Create a temporary file containing the configuration settings to drive OpenSSL
            string     ConfigFileName = Path.GetTempFileName();
            TextWriter ConfigFile     = new StreamWriter(ConfigFileName);

            ConfigFile.WriteLine("[ req ]");
            ConfigFile.WriteLine("distinguished_name     = req_distinguished_name");
            ConfigFile.WriteLine("prompt                 = no");

            ConfigFile.WriteLine("[ req_distinguished_name ]");
            ConfigFile.WriteLine("emailAddress           = {0}", EMailEditBox.Text);
            ConfigFile.WriteLine("commonName             = {0}", CommonNameEditBox.Text);
            ConfigFile.WriteLine("countryName            = {0}", System.Globalization.CultureInfo.CurrentCulture.TwoLetterISOLanguageName);

            ConfigFile.Close();

            // Invoke OpenSSL to generate the certificate request
            Program.Log("Running OpenSSL to generate certificate request...");

            string ResultsText;
            string Executable = OpenSSLPath;
            string Arguments  = String.Format("req -new -nodes -out \"{0}\" -key \"{1}\" -config \"{2}\"",
                                              TargetCertRequestFileName, KeyFileName, ConfigFileName);

            Utilities.RunExecutableAndWait(Executable, Arguments, out ResultsText);

            Program.Log(ResultsText);

            if (!File.Exists(TargetCertRequestFileName))
            {
                Program.Error("... Failed to generate certificate request");
            }
            else
            {
                Program.Log("... Successfully generated certificate request '{0}'", TargetCertRequestFileName);
            }

            // Clean up the temporary files we created
            File.Delete(KeyFileName);
            File.Delete(ConfigFileName);
        }