示例#1
0
        public bool BuildForInstall()
        {
            var selfSignedSsl = false;

            if (!Ssl)
            {
                if (Helpers.ReadQuestion("Do you want to generate a self-signed SSL certificate?"))
                {
                    Directory.CreateDirectory($"/bitwarden/ssl/self/{Domain}/");
                    Console.WriteLine("Generating self signed SSL certificate.");
                    Ssl = selfSignedSsl = true;
                    Helpers.Exec("openssl req -x509 -newkey rsa:4096 -sha256 -nodes -days 365 " +
                                 $"-keyout /bitwarden/ssl/self/{Domain}/private.key " +
                                 $"-out /bitwarden/ssl/self/{Domain}/certificate.crt " +
                                 $"-reqexts SAN -extensions SAN " +
                                 $"-config <(cat /usr/lib/ssl/openssl.cnf <(printf '[SAN]\nsubjectAltName=DNS:{Domain}\nbasicConstraints=CA:true')) " +
                                 $"-subj \"/C=US/ST=Florida/L=Jacksonville/O=8bit Solutions LLC/OU=Bitwarden/CN={Domain}\"");
                }
            }

            if (LetsEncrypt)
            {
                Directory.CreateDirectory($"/bitwarden/letsencrypt/live/{Domain}/");
                Helpers.Exec($"openssl dhparam -out /bitwarden/letsencrypt/live/{Domain}/dhparam.pem 2048");
            }

            Console.WriteLine("Generating key for IdentityServer.");
            Directory.CreateDirectory("/bitwarden/identity/");
            Helpers.Exec("openssl req -x509 -newkey rsa:4096 -sha256 -nodes -keyout identity.key " +
                         "-out identity.crt -subj \"/CN=Bitwarden IdentityServer\" -days 10950");
            Helpers.Exec("openssl pkcs12 -export -out /bitwarden/identity/identity.pfx -inkey identity.key " +
                         $"-in identity.crt -certfile identity.crt -passout pass:{IdentityCertPassword}");

            Console.WriteLine();
            return(selfSignedSsl);
        }
示例#2
0
        public void BuildForInstall()
        {
            if (_context.Stub)
            {
                _context.Config.Ssl                   = true;
                _context.Install.Trusted              = true;
                _context.Install.SelfSignedCert       = false;
                _context.Install.DiffieHellman        = false;
                _context.Install.IdentityCertPassword = "******";
                return;
            }

            _context.Config.Ssl = _context.Config.SslManagedLetsEncrypt;

            if (!_context.Config.Ssl)
            {
                var skipSSL = _context.Parameters.ContainsKey("skip-ssl") && (_context.Parameters["skip-ssl"] == "true" || _context.Parameters["skip-ssl"] == "1");

                if (!skipSSL)
                {
                    _context.Config.Ssl = Helpers.ReadQuestion("Do you have a SSL certificate to use?");
                    if (_context.Config.Ssl)
                    {
                        Directory.CreateDirectory($"/bitwarden/ssl/{_context.Install.Domain}/");
                        var message = "Make sure 'certificate.crt' and 'private.key' are provided in the \n" +
                                      "appropriate directory before running 'start' (see docs for info).";
                        Helpers.ShowBanner(_context, "NOTE", message);
                    }
                    else if (Helpers.ReadQuestion("Do you want to generate a self-signed SSL certificate?"))
                    {
                        Directory.CreateDirectory($"/bitwarden/ssl/self/{_context.Install.Domain}/");
                        Helpers.WriteLine(_context, "Generating self signed SSL certificate.");
                        _context.Config.Ssl             = true;
                        _context.Install.Trusted        = false;
                        _context.Install.SelfSignedCert = true;
                        Helpers.Exec("openssl req -x509 -newkey rsa:4096 -sha256 -nodes -days 36500 " +
                                     $"-keyout /bitwarden/ssl/self/{_context.Install.Domain}/private.key " +
                                     $"-out /bitwarden/ssl/self/{_context.Install.Domain}/certificate.crt " +
                                     $"-reqexts SAN -extensions SAN " +
                                     $"-config <(cat /usr/lib/ssl/openssl.cnf <(printf '[SAN]\nsubjectAltName=DNS:{_context.Install.Domain}\nbasicConstraints=CA:true')) " +
                                     $"-subj \"/C=US/ST=California/L=Santa Barbara/O=Bitwarden Inc./OU=Bitwarden/CN={_context.Install.Domain}\"");
                    }
                }
            }

            if (_context.Config.SslManagedLetsEncrypt)
            {
                _context.Install.Trusted       = true;
                _context.Install.DiffieHellman = true;
                Directory.CreateDirectory($"/bitwarden/letsencrypt/live/{_context.Install.Domain}/");
                Helpers.Exec($"openssl dhparam -out " +
                             $"/bitwarden/letsencrypt/live/{_context.Install.Domain}/dhparam.pem 2048");
            }
            else if (_context.Config.Ssl && !_context.Install.SelfSignedCert)
            {
                _context.Install.Trusted = Helpers.ReadQuestion("Is this a trusted SSL certificate " +
                                                                "(requires ca.crt, see docs)?");
            }

            Helpers.WriteLine(_context, "Generating key for IdentityServer.");
            _context.Install.IdentityCertPassword = Helpers.SecureRandomString(32, alpha: true, numeric: true);
            Directory.CreateDirectory("/bitwarden/identity/");
            Helpers.Exec("openssl req -x509 -newkey rsa:4096 -sha256 -nodes -keyout identity.key " +
                         "-out identity.crt -subj \"/CN=Bitwarden IdentityServer\" -days 36500");
            Helpers.Exec("openssl pkcs12 -export -out /bitwarden/identity/identity.pfx -inkey identity.key " +
                         $"-in identity.crt -passout pass:{_context.Install.IdentityCertPassword}");

            Helpers.WriteLine(_context);

            if (!_context.Config.Ssl)
            {
                var message = "You are not using a SSL certificate. Bitwarden requires HTTPS to operate. \n" +
                              "You must front your installation with a HTTPS proxy or the web vault (and \n" +
                              "other Bitwarden apps) will not work properly.";
                Helpers.ShowBanner(_context, "WARNING", message, ConsoleColor.Yellow);
            }
            else if (_context.Config.Ssl && !_context.Install.Trusted)
            {
                var message = "You are using an untrusted SSL certificate. This certificate will not be \n" +
                              "trusted by Bitwarden client applications. You must add this certificate to \n" +
                              "the trusted store on each device or else you will receive errors when trying \n" +
                              "to connect to your installation.";
                Helpers.ShowBanner(_context, "WARNING", message, ConsoleColor.Yellow);
            }
        }
示例#3
0
        public void BuildForInstall()
        {
            if (_context.Stub)
            {
                _context.Config.Ssl.Enable            = true;
                _context.Install.Trusted              = true;
                _context.Install.SelfSignedCert       = false;
                _context.Install.DiffieHellman        = false;
                _context.Install.IdentityCertPassword = "******";
                return;
            }

            _context.Config.Ssl.Enable = _context.Config.Ssl.ManagedLetsEncrypt;

            if (!_context.Config.Ssl.Enable && _context.Install.Ssl == null)
            {
                _context.Config.Ssl.Enable = Helpers.ReadQuestion("Do you have a SSL certificate to use?");
                if (_context.Config.Ssl.Enable)
                {
                    Directory.CreateDirectory($"{_context.DestDir}/ssl/{_context.Install.Domain}/");
                    var message = "Make sure 'certificate.crt' and 'private.key' are provided in the \n" +
                                  "appropriate directory before running 'start' (see docs for info).";
                    Helpers.ShowBanner(_context, "NOTE", message);
                }
                else if (Helpers.ReadQuestion("Do you want to generate a self-signed SSL certificate?"))
                {
                    Directory.CreateDirectory($"{_context.DestDir}/ssl/self/{_context.Install.Domain}/");
                    Helpers.WriteLine(_context, "Generating self signed SSL certificate.");
                    _context.Config.Ssl.Enable      = true;
                    _context.Install.Trusted        = false;
                    _context.Install.SelfSignedCert = true;
                    Helpers.Exec("openssl req -x509 -newkey rsa:4096 -sha256 -nodes -days 365 " +
                                 $"-keyout {_context.DestDir}/ssl/self/{_context.Install.Domain}/private.key " +
                                 $"-out {_context.DestDir}/ssl/self/{_context.Install.Domain}/certificate.crt " +
                                 $"-reqexts SAN -extensions SAN " +
                                 $"-config <(cat /usr/lib/ssl/openssl.cnf <(printf '[SAN]\nsubjectAltName=DNS:{_context.Install.Domain}\nbasicConstraints=CA:true')) " +
                                 $"-subj \"/C=US/ST=Florida/L=Jacksonville/O=8bit Solutions LLC/OU=ByteGarden/CN={_context.Install.Domain}\"");
                }
            }

            if (_context.Config.Ssl?.ManagedLetsEncrypt ?? false)
            {
                _context.Install.Trusted       = true;
                _context.Install.DiffieHellman = true;
                Directory.CreateDirectory($"{_context.DestDir}/letsencrypt/live/{_context.Install.Domain}/");
                Helpers.Exec($"openssl dhparam -out " +
                             $"{_context.DestDir}/letsencrypt/live/{_context.Install.Domain}/dhparam.pem 2048");
            }
            else if (_context.Config.Ssl.Enable && !_context.Install.SelfSignedCert)
            {
                _context.Install.Trusted = Helpers.ReadQuestion("Is this a trusted SSL certificate " +
                                                                "(requires ca.crt, see docs)?");
            }

            GenerateIdentityCertificate();

            Helpers.WriteLine(_context);

            if (!_context.Config.Ssl.Enable)
            {
                var message = "You are not using a SSL certificate. ByteGarden requires HTTPS to operate. \n" +
                              "You must front your installation with a HTTPS proxy or the web vault (and \n" +
                              "other ByteGarden apps) will not work properly.";
                Helpers.ShowBanner(_context, "WARNING", message, ConsoleColor.Yellow);
            }
            else if (_context.Config.Ssl.Enable && !_context.Install.Trusted)
            {
                var message = "You are using an untrusted SSL certificate. This certificate will not be \n" +
                              "trusted by ByteGarden client applications. You must add this certificate to \n" +
                              "the trusted store on each device or else you will receive errors when trying \n" +
                              "to connect to your installation.";
                Helpers.ShowBanner(_context, "WARNING", message, ConsoleColor.Yellow);
            }
        }
示例#4
0
        private void Build()
        {
            Console.WriteLine("Building docker environment files.");
            Directory.CreateDirectory("/bitwarden/docker/");
            using (var sw = File.CreateText("/bitwarden/docker/global.env"))
            {
                sw.Write($@"ASPNETCORE_ENVIRONMENT=Production
globalSettings__selfHosted=true
globalSettings__baseServiceUri__vault=http://localhost
globalSettings__baseServiceUri__api=http://localhost/api
globalSettings__baseServiceUri__identity=http://localhost/identity
globalSettings__baseServiceUri__admin=http://localhost/admin
globalSettings__baseServiceUri__internalAdmin=http://admin:5000
globalSettings__baseServiceUri__internalIdentity=http://identity:5000
globalSettings__baseServiceUri__internalApi=http://api:5000
globalSettings__baseServiceUri__internalVault=http://web:5000
globalSettings__pushRelayBaseUri=https://push.bitwarden.com
globalSettings__installation__identityUri=https://identity.bitwarden.com
");
            }

            Helpers.Exec("chmod 600 /bitwarden/docker/global.env");

            using (var sw = File.CreateText("/bitwarden/docker/mssql.env"))
            {
                sw.Write($@"ACCEPT_EULA=Y
MSSQL_PID=Express
SA_PASSWORD=SECRET
");
            }

            Helpers.Exec("chmod 600 /bitwarden/docker/mssql.env");

            Console.WriteLine("Building docker environment override files.");
            Directory.CreateDirectory(" /bitwarden/env/");
            using (var sw = File.CreateText("/bitwarden/env/global.override.env"))
            {
                foreach (var item in _globalValues)
                {
                    sw.WriteLine($"{item.Key}={item.Value}");
                }
            }

            Helpers.Exec("chmod 600 /bitwarden/env/global.override.env");

            using (var sw = File.CreateText("/bitwarden/env/mssql.override.env"))
            {
                foreach (var item in _mssqlValues)
                {
                    sw.WriteLine($"{item.Key}={item.Value}");
                }
            }

            Helpers.Exec("chmod 600 /bitwarden/env/mssql.override.env");

            // Empty uid env file. Only used on Linux hosts.
            if (!File.Exists("/bitwarden/env/uid.env"))
            {
                using (var sw = File.CreateText("/bitwarden/env/uid.env")) { }
            }
        }