Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Keepassxc | 17,589 | a day ago | 633 | other | C++ | |||||
KeePassXC is a cross-platform community-driven port of the Windows application “Keepass Password Safe”. | ||||||||||
Keeweb | 11,700 | 1 | 5 months ago | 1 | May 22, 2017 | 376 | other | JavaScript | ||
Free cross-platform password manager compatible with KeePass | ||||||||||
Macpass | 6,642 | 3 months ago | 279 | other | Objective-C | |||||
A native macOS KeePass client | ||||||||||
Keepassx | 4,332 | 3 years ago | 78 | other | C++ | |||||
KeePassX is a cross platform port of the windows application “Keepass Password Safe”. | ||||||||||
Keepass2android | 4,134 | 3 days ago | 1,014 | gpl-3.0 | Java | |||||
Password manager app for Android | ||||||||||
Keepassdx | 3,645 | 5 days ago | 366 | gpl-3.0 | Kotlin | |||||
Lightweight vault and password manager for Android, KeePassDX allows editing encrypted data in a single file in KeePass format and fill in the forms in a secure way. | ||||||||||
Authpass | 1,888 | 2 months ago | 132 | gpl-3.0 | Dart | |||||
AuthPass - Password Manager based on Flutter for all platforms. Keepass 2.x (kdbx 3.x) compatible. | ||||||||||
Keepasshttp | 1,772 | 2 years ago | 202 | gpl-3.0 | JavaScript | |||||
KeePass plugin to expose password entries securely (256bit AES/CBC) over HTTP | ||||||||||
Strongbox | 1,180 | 13 hours ago | 167 | agpl-3.0 | Objective-C | |||||
A KeePass/Password Safe Client for iOS and OS X | ||||||||||
Keepassium | 1,002 | a month ago | 55 | other | Swift | |||||
KeePass-compatible password manager for iOS |
is a plugin for KeePass 2.x and provides a secure means of exposing KeePass entries via HTTP for clients to consume.
This plugin is primarily intended for use with PassIFox for Mozilla Firefox and chromeIPass for Google Chrome.
choco install keepass-keepasshttp
KeePassHttp.plgx
$ apt-get install mono-complete
(in Debian it should be enough to install the packages libmono-system-runtime-serialization4.0-cil and libmono-posix2.0-cil)sudo apt-get install libmono-system-xml-linq4.0-cil libmono-system-data-datasetextensions4.0-cil libmono-system-runtime-serialization4.0-cil mono-mcs
KeePass needs Mono. You can find detailed installation instructions on the official page of KeePass.
Perry has tested KeePassHttp with Mono 2.6.7 and it appears to work well. With Mono 2.6.7 and a version of KeePass lower than 2.20 he could not get the plgx file to work on linux. If the plgx file does also not work for you, you can try the two DLL files KeePassHttp.dll and Newtonsoft.Json.dll from directory mono which should work for you.
With newer versions of Mono and KeePass it seems that the plgx file works pretty fine. More information about it are contained in the following experience report.
Just wanted to let you know, I'm running Fedora 18, which currently uses mono v2.10.8:
> mono-core.x86_64 2.10.8-3.fc18 @fedora
> mono-data.x86_64 2.10.8-3.fc18 @fedora
> mono-data-sqlite.x86_64 2.10.8-3.fc18 @fedora
> mono-extras.x86_64 2.10.8-3.fc18 @fedora
> mono-mvc.x86_64 2.10.8-3.fc18 @fedora
> mono-wcf.x86_64 2.10.8-3.fc18 @fedora
> mono-web.x86_64 2.10.8-3.fc18 @fedora
> mono-winforms.x86_64 2.10.8-3.fc18 @fedora
> mono-winfx.x86_64 2.10.8-3.fc18 @fedora
I have no problems using "KeePassHttp.plgx". I simply dropped the .plgx-file in my KeePass folder, and it works.
I'm currently using KeePass v2.22.
Nevertheless, until KeePass v2.21 I used the 2 suggested .dll's and it worked fine too.
Usually I only use chromeIPass, but I did a short test with PassIFox and seems to be working just fine.
KeePassHttp works out-of-the-box. You don't have to explicitely configure it.
You can open the options dialog with menu: Tools > KeePassHttp Options
The options dialog will appear:
General tab
Advanced tab
This is already implemented directly in KeePass.
Open the context menu of an entry by clicking right on it and select Duplicate entry:
Check the option to use references for username and password:
You can change the title, URL and evertything of the copied entry, but not the username and password. These fields contain a Reference Key which refers to the master entry you copied from.
First: If an error occures it will be shown as notification in system tray or as message box in KeePass.
Otherwise please check if it could be an error of the client you are using. For passIFox and chromeIPass you can report an error here.
If you are having problems with KeePassHttp, please tell us at least the following information:
Maybe you get the following error message:
In old versions the explaining first part of the message does not exist!
This error occurs because you have multiple copies of KeePassHttp in your KeePass directory! Please check all PLGX- and DLL-files in your KeePass directory and all sub-directories whether they are a copy of KeePassHttp.
Note: KeePass does not detect plugins by filename but by extension! If you rename KeePassHttp.plgx to HelloWorld.plgx it is still a valid copy of KeePassHttp.
If you really have only one copy of KeePassHttp in your KeePass directory another application seems to use port 19455 to wait for signals. In this case try to stop all applications and restart everyone again while checking if the error still occurs.
KeePassHttp can receive 2 different URLs, called URL and SubmitURL.
CompareToUrl = SubmitURL if set, URL otherwise
For every entry, the Levenshtein Distance of his Entry-URL (or Title, if Entry-URL is not set) to the CompareToURL is calculated.
Only the Entries with the minimal distance are returned.
###Example: Submit-Url: http://www.host.com/subdomain1/login
Entry-URL | Distance |
---|---|
http://www.host.com/ | 16 |
http://www.host.com/subdomain1 | 6 |
http://www.host.com/subdomain2 | 7 |
Result: second entry is returned
For security reasons KeePassHttp communicates only with the symmetric-key algorithm AES. The entries are crypted with a 256bit AES key.
There is one single point where someone else will be able to steal the encryption keys. If a new client has to connect to KeePassHttp, the encryption key is generated and send to KeyPassHttp via an unencrypted connection.
If you want to develop new features or improve existing ones here is a way to build it at your own:
I use the following batch code to automatically do steps 2 - 4:
RD /S /Q C:\full-path-to-keepasshttp-source\bin
RD /S /Q C:\full-path-to-keepasshttp-source\obj
DEL C:\full-path-to-keepasshttp-source\KeePassHttp.dll
"C:\Program Files (x86)\KeePass Password Safe 2\keepass.exe" --plgx-create C:\full-path-to-keepasshttp-source
This is the only point at which an administrator snooping traffic will be able to steal encryption keys:
(1) can be skipped if client does not have a key configured
(based on packet sniffing and code analyssis)
Generic HTTP request is json sent in POST message. Cipher, by means of OpenSSL library is AES-256-CBC
, so key is 32 byte long.
Host: localhost:19455
Connection: keep-alive
Content-Length: 54
Content-Type: application/json
Accept: */*
Accept-Encoding: gzip, deflate, br
{"RequestType":"test-associate","TriggerUnlock":false}
Also, minimal JSON request (except that one without key set up) consists of four main parameters:
test-associate
, associate
, get-logins
, get-logins-count
, set-login
, ...encrypt(base64_encode($nonce), $key, $nonce);
associate
, not used during associate
Request, without key, seems like initialization of every key assignation session:
{
"RequestType":"test-associate",
"TriggerUnlock":false
}
Response: (without success)
{
"Count":null,
"Entries":null,
"Error":"",
"Hash":"d8312a59523d3c37d6a5401d3cfddd077e194680",
"Id":"",
"Nonce":"",
"RequestType":"test-associate",
"Success":false,
"Verifier":"",
"Version":"1.8.4.1",
"objectName":""
}
If you have key, you can test with request like this:
{
"Nonce":"+bG+EpbCR4jSnjROKAAw4A==", // random 128bit vector, base64 encoded
"Verifier":"2nVUxyddGpe62WGx5cm3hcb604Xn8AXrYxUK2WP9dU0=", // Nonce in base64 form, encoded with aes
"RequestType":"test-associate",
"TriggerUnlock":false,
"Id":"PHP"
}
Request:
{
"RequestType":"associate",
"Key":"CRyXRbH9vBkdPrkdm52S3bTG2rGtnYuyJttk/mlJ15g=", // Base64 encoded 256 bit key
"Nonce":"epIt2nuAZbHt5JgEsxolWg==",
"Verifier":"Lj+3N58jkjoxS2zNRmTpeQ4g065OlFfJsHNQWYaOJto="
}
Response:
{
"Count":null,
"Entries":null,
"Error":"",
"Hash":"d8312a59523d3c37d6a5401d3cfddd077e194680",
"Id":"PHP", // You need to save this - to use in future
"Nonce":"cJUFe18NSThQ/0yAqZMaDA==",
"RequestType":"associate",
"Success":true,
"Verifier":"ChH0PtuQWP4UKTPhdP3XSgwFyVdekHmHT7YdL1EKA+A=",
"Version":"1.8.4.1",
"objectName":""
}
Request:
{
"RequestType":"get-logins",
"SortSelection":"true",
"TriggerUnlock":"false",
"Id":"PHP",
"Nonce":"vCysO8UwsWyE2b+nMzE3/Q==",
"Verifier":"5Nyi5973GawqdP3qF9QlAF/KlZAyvb6c5Smhun8n9wA=",
"Url":"Gz+ZCSjHAGmeYdrtS78hSxH3yD5LiYidSq9n+8TdQXc=", // Encrypted URL
"SubmitUrl":"<snip>" // Encrypted submit URL
}
Response:
{
"Count":3,
"Entries":[
{
"Login":"{encrypted login base64}",
"Name":"{encrypted item name}",
"Password":"{encrypted Password}",
"StringFields":null,
"Uuid":"{encrypted UUID}"
},
{
<snip>
},
{
<snip>
}
],
"Error":"",
"Hash":"d8312a59523d3c37d6a5401d3cfddd077e194680",
"Id":"PHP",
"Nonce":"Aeh9maerCjE5v5V8Tz2YxA==",
"RequestType":"get-logins",
"Success":true,
"Verifier":"F87c4ggkMTSEptJT8/FypBH491kRexTAiEZxovLMvD8=",
"Version":"1.8.4.1",
"objectName":""
}
Request:
{
"RequestType":"get-logins-count",
"TriggerUnlock":"false",
"Id":"PHP",
"Nonce":"vCysO8UwsWyE2b+nMzE3/Q==",
"Verifier":"5Nyi5973GawqdP3qF9QlAF/KlZAyvb6c5Smhun8n9wA=",
"Url":"Gz+ZCSjHAGmeYdrtS78hSxH3yD5LiYidSq9n+8TdQXc=", // Encrypted URL
"SubmitUrl":"<snip>" // Encrypted submit URL
}
Response:
{
"Count":3,
"Entries":null,
"Error":"",
"Hash":"d8312a59523d3c37d6a5401d3cfddd077e194680",
"Id":"PHP",
"Nonce":"Aeh9maerCjE5v5V8Tz2YxA==",
"RequestType":"get-logins",
"Success":true,
"Verifier":"F87c4ggkMTSEptJT8/FypBH491kRexTAiEZxovLMvD8=",
"Version":"1.8.4.1",
"objectName":""
}
Request:
{
"RequestType":"set-login",
"Id":"PHP",
"Nonce":"VBrPACEOQGxIBkq58/5Xig==",
"Verifier":"1dT0gnw6I1emxDzhtYn1Ecn1sobLG98GfTf7Z/Ma0R0=",
"Login":"lm9qo5HcAYEIaHsCdSsYHQ==", // encrypted username
"Password":"EZLtRxFgZVqIwv5xI9tfvA==", // encrypted password
"Url":"<snip>",
"SubmitUrl":"<snip>"
}
Response:
{
"Count":null,
"Entries":null,
"Error":"",
"Hash":"d8312a59523d3c37d6a5401d3cfddd077e194680",
"Id":"PHP",
"Nonce":"uofAcMtnPQo5TOdI21VjBw==",
"RequestType":"set-login",
"Success":true,
"Verifier":"4u8OINVGBtlCCPY7OnW5T616iPlzvf56LzPtPAwZIs0=",
"Version":"1.8.4.1",
"objectName":""
}