Commit Graph

39 Commits

Author SHA1 Message Date
Pascal Pothmann
8def331bb6 Update to .NET 10.0 and fix certificate validation for Bitwarden server 2026.5.0 (#282)
* Update to .NET 10.0 for Bitwarden server 2026.5.0 compatibility

Bitwarden server 2026.5.0 ships with .NET 10.0 runtime only, breaking
the fast-patch build. This commit updates all .NET projects and build
pipelines to target net10.0 and the dotnet/sdk:10.0 image.

Additionally:
- Replace obsolete X509Certificate2(byte[]) constructors with
  X509CertificateLoader.LoadCertificate() / LoadPkcs12FromFile()
  to resolve SYSLIB0057 warnings introduced in .NET 9/10
- Add -certpbe AES-256-CBC -keypbe AES-256-CBC -macalg SHA256 to
  generate-keys.sh PKCS#12 export, fixing OpenSSL 3.x errors caused
  by the deprecated RC2-40-CBC legacy algorithm
- Update FixRuntimeConfig fallback framework version to 10.0.0

Fixes #281

Signed-off-by: Pascal Pothmann <19438422+p0thi@users.noreply.github.com>

* Fix certificate validation by replacing all thumbprint occurrences

Bitwarden's LicensingService performs two validation checks:
1. Validates _creationCertificate thumbprint
2. Validates all certificates in _verificationCertificates

The thumbprint constants are inlined at compile time, creating multiple
Ldstr instructions in the IL code. The patcher was only replacing the
first occurrence, causing the second validation to fail with:
'Invalid license verifying certificate.'

This fix replaces ALL occurrences of the old thumbprint to ensure both
validation checks pass.

Fixes runtime error: 'Invalid license verifying certificate'

---------

Signed-off-by: Pascal Pothmann <19438422+p0thi@users.noreply.github.com>
Co-authored-by: Pascal Pothmann <19438422+p0thi@users.noreply.github.com>
2026-06-03 21:57:45 +02:00
Lorenzo Moscati
9962717481 Fast patching via IL rewriting of Bitwarden images (#278)
* Fast patching via IL rewriting of Bitwarden images

Brings back the pre-047c4dd approach of patching pre-built Bitwarden
images instead of cloning and building from source. The fast patch mode
(now default) pulls ghcr.io/bitwarden/{api,identity} and rewrites
Core.dll in-place using Mono.Cecil, bypassing the full source build.

Updated to work with current Bitwarden:
- Uses SingleFileExtractor.Core to extract Core.dll from the
  PublishSingleFile bundle before patching; replaces the native
  launcher with a shell script wrapper (exec dotnet /app/Api.dll)
  so entrypoint.sh continues to work unchanged
- LicensingService search is now namespace-agnostic (handles the
  Bit.Core.Services → Bit.Core.Billing.Services rename)
- Thumbprint matching uses Contains() instead of Equals() to handle
  the hidden Unicode LRM character prepended to the production
  thumbprint string literal in the compiled IL

The original source-build path is preserved and accessible via
BITBETTER_BUILD_FROM_SOURCE=1.

Signed-off-by: Lorenzo Moscati <lorenzo@moscati.page>

* Address review: fix correctness and robustness

- dotnet publish -c Release with explicit -o to match Dockerfile expectation
- Add --platform "$TARGETPLATFORM" to fast-patch docker builds for parity with source-build mode
- mkdir -p for idempotent .keys directory creation
- Align namespace to BitwardenSelfLicensor (repo convention)
- Branch bundle extraction on .dll extension instead of bare catch; exit 1 with clear message on failure
- Replace First() with FirstOrDefault() + targeted error on missing licensing resource
- FixRuntimeConfig derives framework name/version from includedFrameworks; switch to LatestPatch rollForward

Signed-off-by: Lorenzo Moscati <lorenzo@moscati.page>

* Add BITBETTER_BUILD_FROM_SOURCE notes to README.md

Signed-off-by: Lorenzo Moscati <lorenzo@moscati.page>

---------

Signed-off-by: Lorenzo Moscati <lorenzo@moscati.page>
Co-authored-by: h44z <christoph.h@sprinternet.at>
2026-04-12 11:03:25 +01:00
Lorenzo Moscati
dbaaa8b45d Add missing licence options, bump licence version and add Token claim (#277)
* Add license options, bump version, add Token claim

Added the missing license options:
- `ExpirationWithoutGracePeriod`
- `UseAutomaticUserConfirmation`
- `UsePhisingBlocker`
- `UseDisableSmAdsForUsers`
- `UseMyItems`

Bumped the license version from 15 to 16 (`UseOrganizationDomains` is valid only with version 16).

Added `GenerateUserToken` and `GenerateOrgToken` helpers to create the expected `Token` claim that’s still missing in our licenses.

Signed-off-by: Lorenzo Moscati <lorenzo@moscati.page>

* Address Copilot review

- Capture `now = DateTime.UtcNow` once per license-generation call and pass it
  into GenerateUserToken/GenerateOrgToken, so all date fields in the JSON
  license and the embedded JWT derive from the same instant (fixes drift across
  separate DateTime.UtcNow calls)
- Move set("Token", ...) before ComputeHash/Sign in both GenerateUserLicense
  and GenerateOrgLicense so all fields are finalised before signing
- Add UseRiskInsights claim to the org JWT; confirmed present as a required
  claim in Bitwarden's OrganizationLicenseClaimsFactory

Version is intentionally excluded from both JWTs: neither UserLicenseClaimsFactory
nor OrganizationLicenseClaimsFactory generates it, and the claims-path VerifyData
never reads it.

Signed-off-by: Lorenzo Moscati <lorenzo@moscati.page>

---------

Signed-off-by: Lorenzo Moscati <lorenzo@moscati.page>
2026-04-12 07:04:48 +01:00
h44z
0e2c9d42aa Fix path of OrganizationLicense object (#254)
* Fix path of OrganizationLicense object (see https://github.com/bitwarden/server/tree/main/src/Core/Billing/Organizations/Models)
2025-08-10 10:53:29 +02:00
h44z
df9e74bb7a Fix license generator according to upstream changes (#245) (#249) 2025-07-29 21:08:44 +00:00
Lorenzo Moscati
b9c46fffb2 Update Program.cs (#237)
Set three new license options to true: UseRiskInsights, UseOrganizationDomains, and UseAdminSponsoredFamilies.
2025-07-10 22:43:22 +00:00
Genva
047c4ddf6f Build image from source (#234)
* Build image from source

* Clone only current version tag

* remove obsolete project

* support loading Core.dll from single file application

* pass single file application to license gen

* remove loose file parameter

* fix executable parameter

* Remove unnecessary changes in LicensingService.cs

* Revert "Remove unnecessary changes in LicensingService.cs"

This reverts commit d8465e1aec.

* Changed comment
2025-07-09 01:04:58 +00:00
h44z
676dd7b85c Fix warning in Dockerfile (#230) 2025-05-17 14:22:29 +00:00
Shuttleu
7f64e2cd4a Update license to version 15 (#211)
Co-authored-by: captainhook <16797541+captainhook@users.noreply.github.com>
2024-10-10 14:29:59 +01:00
Michiel Hazelhof
a65277198c Use new location (#202) 2024-06-30 01:33:01 +00:00
kasperk81
12da7d7249 use correct framework (#193)
* use correct framework

* use correct framework
2024-03-30 09:31:27 +00:00
Jan Schöppach
3c703f517d Update to .NET 8.0 to fix building with bitwarden v2024.2.2 (#187)
* Update to .NET 8.0 to fix building with bitwarden v2024.2.2

* Also update license gen to .NET 8.0
2024-02-22 23:16:34 +00:00
Rakesh
b93c9487eb Update License to use Secrets Manager fully (#182) 2024-01-19 18:02:14 +00:00
Ayitaka
e173c06320 Updated license version to 12, added SM options, increased max seats (short to int) (#172)
* - Updated license version to 12
- Added new SM license options

* Change seats, smseats, smserviceaccounts from short to int, like they are in the Bitwarden server code, to allow for the accurate maximum amount of seats
2023-11-29 12:07:21 +00:00
Ayitaka
80c0808e72 Update licenseGen with latest version and options (#165)
- Changed Version to 10
- Uncommented UseScim
- Added UseCustomPermissions
2023-04-21 14:24:41 +02:00
h44z
b819fe0c7d update to dotnet 6.0 (#148) (#150) 2022-09-01 14:43:34 -07:00
h44z
960894cff4 update/remove json lib (#146)
* update/remove json lib

* remove json lib
2022-08-16 13:34:17 -07:00
h44z
6038a8668b License gen fixes (#145)
* set default storage space to max (#122)

* update license fields to newest version

* strange characters for non-interactive mode (#123)
2022-08-16 22:32:39 +02:00
clanto007
af2d744061 fix '3.1.0' was not found (#116)
* Update build.sh

* Update Dockerfile

* Update bitBetter.csproj

* Update Dockerfile

* Update Dockerfile

* Update licenseGen.csproj

* Apply suggestions from code review

Co-authored-by: h44z <christoph.h@sprinternet.at>

* Update src/licenseGen/Dockerfile

Co-authored-by: h44z <christoph.h@sprinternet.at>

* Update src/licenseGen/Dockerfile

Co-authored-by: h44z <christoph.h@sprinternet.at>
2021-08-31 10:18:29 +02:00
captainhook
a17681e82b fix integer type (#110)
fix integer type for GenerateOrgLicense's "Seats" value
2021-08-09 18:10:49 +02:00
kerenon
7ddf01fdf6 MaxStorageGb customization (#88)
* MaxStorageGb customization

* Defaulting to short.MaxValue if user entry is blank

* Update text prompt
2020-11-26 13:04:18 +00:00
captainhook
7d8f0b1082 Make Sso available in org license (#73)
* Exclude cert.cert from git

* Use latest release of bitwarden as base image (#67, #66)

* Add a script which simplifies Bitwarden updates

* fix typo

* Add UseApi

* Updated version, created update section

* Workaround for docker-compose --ignore-pull-failures bugs (4377 and 7127)

* use version from docker script

* check if bitbetter images are outdated

* Make Sso available in org license

Add `UseSso` var and enable

* Update README.md

Co-authored-by: Christoph Haas <christoph.h@sprinternet.at>
Co-authored-by: Lework <kuailemy123@163.com>
Co-authored-by: Captainhook <ec14018@qmul.ac.uk>
2020-09-10 15:36:44 -04:00
accolon
faf7833f44 Make policies available in generated org licenses. (#56)
* Make policies available in generated org licenses.

* Change license version to current value used in BitWarden. Add info about compatibility in README file.
2020-03-17 12:19:18 +00:00
Michiel Hazelhof
006fa1fecf Update .net core and newtonsoft.json
Co-authored-by: Michiel Hazelhof <m.hazelhof@fyn.nl>

Due to compatibility issues laid out in issue #53:

Update from .net core 2.0 to 3.1 and newtonsoft.json 12.0.1 to 12.0.3.
2020-03-14 07:00:25 -04:00
Jeff Alyanak
d98d4cad6a Fixed default key directory (#46)
* Fixed default key directory

Script was not looking in the right place for the auto-generated key directory. This patch fixes issue #35.

* Cleans up Key Directory Patch

Key directory path fix was echoing the directory when run.
2019-12-27 19:25:41 -05:00
Vinrobot
3e44d7347b Improve build and scripts (#30)
* Use absolute path rather than relative path in scripts

* Remove src/bitBetter/.keys/cert.cert

* Build licenseGen in Docker
This way we don't have to install dotnet sdk on the host

* Build bitBetter in Docker
This way we don't have to install dotnet sdk on the host

* Change DIR in run.sh to point to the project root

* Replace echo in Dockerfiles by set -x and set -e

* Use same Dockerfile for api and identity images

* Update README.md

* Update CircleCI config
The Docker Executor can't mount volume.
https://support.circleci.com/hc/en-us/articles/360007324514
https://circleci.com/docs/2.0/executor-types/#using-machine

* Make scripts work with sh

* Remove the container used to build bitBetter
2019-07-07 12:18:27 -04:00
Jeff Alyanak
6c8789cd67 License Generator Interactive Mode (#23)
* Added a Key Generating script

To make the keygen process a bit easier I've added a `generate-keys.sh` script that can be found in the `.keys` directory. It will generate the key & cert and bundle them into the required pkcs#12 file.

I've updated the readme to include instructions on the script.

* Generate bitbetter/identiry container with modified Core.dll

Added the generation of a second modified container, bitbetter/identity, which contains the modified dll. Fixes #12.

This works on my testing environment but has not gone through extensive testing. I'd recommend a review and cleanup of this commit before it is merged into the develop or master branches.

* Updated Docs

I've taken the steps written out by @online-stuff and consolidated/organized them into the README. This closes #13.

In a future update it might be worth adding a docs/ directory and breaking the readme into several docs that link to one another.

* Updated build.sh

Build now checks for and creates missing .keys directories.

* Added subj to allow for non-interactive use.

* Generate keys on build.

* Circle-ci needs to gen keys to test build

* Generate keys if they don't exist.

Don't overwrite if keys already exist.

* Generate keys online in the .keys directory

* Updated README.md

* Added initial interactive options

* Functional implementation of licensegen interactive mode.

* Bumped Newtonson.Json version

Never versions of the dotnet-sdk have issues with older Newtonsoft versions. 12.0.1 seems to satisfy the widest variety of sdk versions.

* Removing old readme

* Removed Duplicate Section

* Fixed typo

This fixes and closes issue #24.
2019-06-05 14:19:39 -04:00
Jeff Alyanak
15371c362c Bitbetter identity Core.dll (#14)
* Added a Key Generating script

To make the keygen process a bit easier I've added a `generate-keys.sh` script that can be found in the `.keys` directory. It will generate the key & cert and bundle them into the required pkcs#12 file automatically when running the build script if none already exist.

* Generate bitbetter/identiry container with modified Core.dll

Added the generation of a second modified container, bitbetter/identity, which contains the modified dll. Fixes #12.

This works on my testing environment but has not gone through extensive testing. I'd recommend a review and cleanup of this commit before it is merged into the develop or master branches.
2019-05-25 18:12:10 -04:00
online-stuff
9f1422ac68 Removed /jobs commands, not needed anymore. 2018-11-30 14:39:08 -07:00
online-stuff
a38ef370cb Update Program.cs 2018-11-21 20:42:23 -07:00
online-stuff
1da8b95cbd Update Program.cs 2018-11-21 20:17:39 -07:00
online-stuff
c6da1246dd Update Program.cs 2018-11-21 19:49:40 -07:00
online-stuff
6277b96b6a Update Dockerfile
Fix cp error
2018-11-21 19:27:25 -07:00
Jake Swenson
1f37163c8f fix jobs 2017-10-30 08:20:27 -07:00
Jake Swenson
6580c442b9 user id fix 2017-10-29 17:58:34 -07:00
Jake Swenson
92555591f5 fixed 2017-10-29 12:44:54 -07:00
Jake Swenson
cae6e6f051 type 2017-10-29 12:18:22 -07:00
Jake Swenson
f7ec8b477d updates 2017-10-29 12:13:38 -07:00
Jake Swenson
5c58b0d8fd adding license gen 2017-10-29 09:57:49 -07:00