[PM-23409] feat: Add client certificate authentication (mTLS) support for self-hosted environments #1720
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
🎟️ Tracking
📔 Objective
This PR implements client certificate authentication (mTLS) support for iOS app when connecting to self-hosted Bitwarden environments that require client certificates.
Key Features:
Technical Implementation:
ClientCertificateConfiguration
model for certificate data and metadataClientCertificateService
for secure certificate management operationsCertificateHTTPClient
with URLSession delegate for mTLS authenticationThis enables users to authenticate with self-hosted Bitwarden servers that require client certificates for enhanced security.
📸 Screenshots
⏰ Reminders before review
🦮 Reviewer guidelines
Key Areas for Review:
Files to Focus On:
ClientCertificateService.swift
- Core certificate management logicCertificateHTTPClient.swift
- mTLS HTTP client implementationSelfHostedView.swift
- UI integration and user experienceStateService.swift
&AppSettingsStore.swift
- Secure storage implementation:+1:
) or similar for great changes:memo:
) or ℹ️ (:information_source:
) for notes or general info:question:
) for questions:thinking:
) or 💭 (:thought_balloon:
) for more open inquiry that's not quite a confirmed issue and could potentially benefit from discussion:art:
) for suggestions / improvements:x:
) or:warning:
) for more significant problems or concerns needing attention:seedling:
) or ♻️ (:recycle:
) for future improvements or indications of technical debt:pick:
) for minor or nitpick changes