- Optional feature to allow users to create personal repositories\r
- Optional feature to fork a repository to a personal repository\r
- Optional feature to create a repository on push\r
-- Experimental built-in Garbage Collection\r
+- *Experimental* built-in Garbage Collection\r
- Ability to federate with one or more other Gitblit instances\r
- RSS/JSON RPC interface\r
- Java/Swing Gitblit Manager tool \r
\r
## Gitblit GO Features\r
- Out-of-the-box integrated stack requiring minimal configuration\r
-- Automatically generates a self-signed certificate for *localhost* https communications \r
- (includes script to generate a self-signed certificate for *your hostname*, see [setup](/setup.html) for details)\r
+- Automatic generation of ssl certificate for https communications\r
+- Integrated GUI tool to facilitate x509 PKI including ssl and client certificate generation, client certificate revocation, and client certificate distribution\r
- Single text file for configuring server and gitblit\r
- A Windows service installation script and configuration tool\r
- Built-in AJP connector for Apache httpd \r
- *git.repositoryFolder* (path may be relative or absolute)\r
- *groovy.scriptsFolder* (path may be relative or absolute)\r
- *groovy.grapeFolder* (path may be relative or absolute)\r
- - *web.siteName* (used in certificate generation, etc)\r
- *server.tempFolder* (path may be relative or absolute)\r
- *server.httpPort* and *server.httpsPort*\r
- *server.httpBindInterface* and *server.httpsBindInterface* \r
- *git.packedGitLimit* (set larger than the size of your largest repository)\r
- *git.streamFileThreshold* (set larger than the size of your largest committed file)\r
3. Execute `authority.cmd` or `java -jar authority.jar` from a command-line\r
- a. enter default values for your generated certificates in the *new certificate defaults* dialog\r
- b. enter the store password used in *server.storePassword* when prompted *(this generates an SSL certificate for **localhost**)*\r
- c. you will also want to generate SSL certificates for the hostnames or ip addresses you serve from\r
- d. exit the authority app\r
+ 1. fill out the fields in the *new certificate defaults* dialog\r
+ 2. enter the store password used in *server.storePassword* when prompted. This generates an SSL certificate for **localhost**.\r
+ 3. you may want to generate an SSL certificate for the hostname or ip address hostnames you are serving from<br/>**NOTE:** You can only have **one** SSL certificate specified for a port.\r
+ 5. exit the authority app\r
4. Execute `gitblit.cmd` or `java -jar gitblit.jar` from a command-line\r
5. Open your browser to <http://localhost:8080> or <https://localhost:8443> depending on your chosen configuration.\r
6. Enter the default administrator credentials: **admin / admin** and click the *Login* button \r
Cannot get remote repository refs.\r
Reason: https:/myserver.com/git/myrepo.git: cannot open git-upload-pack\r
\r
-If you want to serve your repositories to another machine over https then you will want to generate your own certificate.\r
+If you want to serve your repositories to another machine over https then you will want to generate a new certificate for the hostname or ip address you are serving from.\r
\r
1. `authority.cmd` or `java -jar authority.jar`\r
2. Click the *new ssl certificate* button (red rosette in the toolbar in upper left of window)\r
3. Enter the hostname or ip address\r
-4. Enter the *server.storePassword* password\r
+4. Make sure the checkbox *serve https with this certificate* is checked\r
+5. In the keystore password prompt, enter the *server.storePassword* password\r
\r
-Additionally, if you want to change the value of *server.storePassword* (recommended) you will have to delete the following files and then start the Gitblit Certificate Authority app:\r
+If you decide to change the value of *server.storePassword* (recommended) <u>after</u> you have already started Gitblit or Gitblit Certificate Authority, then you will have to delete the following files and then restart the Gitblit Certificate Authority app:\r
+\r
1. serverKeyStore.jks\r
2. serverTrustStore.jks\r
3. certs/caKeyStore.jks\r
4. certs/ca.crt\r
+5. certs/caRevocationList.crl (optional)\r
\r
### Client SSL Certificates\r
SINCE 1.2.0\r
\r
1. `authority.cmd` or `java -jar authority.jar`\r
2. Select the user for which to generate the certificate\r
-3. Click the *new certificate* button and enter the expiration date of the certificate. You must also enter a password for the generated keystore. This password is not the same as the user's login password. This password is used to protect the privatekey and public certificate you will generate for the selected user. You must also enter a password hint for the user.\r
+3. Click the *new certificate* button and enter the expiration date of the certificate. You must also enter a password for the generated keystore. This password is *not* the same as the user's login password. This password is used to protect the privatekey and public certificate you will generate for the selected user. You must also enter a password hint for the user.\r
4. If your mail server settings are properly configured you will have a *send email* checkbox which you can use to immediately send the generated certificate bundle to the user.\r
\r
+#### Certificate Inspection and Advanced Troubleshooting\r
+\r
+X509 certificates can be confusing and tricky even with the simplified Gitblit Certificate Authority tool. If you find you need more tooling to understand your keystores, certificates, and certificate revocation lists (CRLs), I highly recommend [Portecle](http://portecle.sourceforge.net) which can be conveniently launched as a [Java Web Start app](http://portecle.sourceforge.net/webstart/portecle.jnlp).\r
+\r
### Running as a Windows Service\r
Gitblit uses [Apache Commons Daemon](http://commons.apache.org/daemon) to install and configure its Windows service.\r
\r
--httpPort HTTP port for to serve. (port <= 0 will disable this connector)\r
--httpsPort HTTPS port to serve. (port <= 0 will disable this connector)\r
--ajpPort AJP port to serve. (port <= 0 will disable this connector)\r
+ --alias Alias in keystore of SSL cert to use for https serving\r
--storePassword Password for SSL (https) keystore.\r
--shutdownPort Port for Shutdown Monitor to listen on. (port <= 0 will disable this monitor)\r
--tempFolder Folder for server to extract built-in webapp\r
\r
#### additions\r
\r
-- Implemented discrete repository permissions (issue 36)\r
+- Implemented discrete repository permissions (issue 36) \r
- V (view in web ui, RSS feeds, download zip)\r
- R (clone)\r
- RW (clone and push)\r
- RWD (clone and push with ref creation, deletion)\r
- RW+ (clone and push with ref creation, deletion, rewind)\r
While not as sophisticated as Gitolite, this does give finer access controls. These permissions fit in cleanly with the existing users.conf and users.properties files. In Gitblit <= 1.1.0, all your existing user accounts have RW+ access. If you are upgrading to 1.2.0, the RW+ access is *preserved* and you will have to lower/adjust accordingly.\r
-- Implemented *case-insensitive* regex repository permission matching (issue 36)\r
+- Implemented *case-insensitive* regex repository permission matching (issue 36) \r
This allows you to specify a permission like `RW:mygroup/.*` to grant push privileges to all repositories within the *mygroup* project/folder.\r
- Added DELETE, CREATE, and NON-FAST-FORWARD ref change logging\r
- Added support for personal repositories.\r
Personal repositories can be created by accounts with the *create* permission and are stored in *git.repositoriesFolder/~username*. Each user with personal repositories will have a user page, something like the GitHub profile page. Personal repositories have all the same features as common repositories, except personal repositories can be renamed by their owner.\r
-- Added support for server-side forking of a repository to a personal repository (issue 137)\r
-In order to fork a repository, the user account must have the *fork* permission **and** the repository must *allow forks*. The clone inherits the access list of its origin. i.e. if Team A has clone access to the origin repository, then by default Team A also has clone access to the fork. This is to facilitate collaboration. The fork owner may change access to the fork and add/remove users/teams, etc as required <u>however</u> it should be noted that all personal forks will be enumerated in the fork network regardless of access view restrictions. If you really must have an invisible fork, the clone it locally, create a new repository for your invisible fork, and push it back to Gitblit.\r
-- Added optional *create-on-push* support\r
+- Added support for server-side forking of a repository to a personal repository (issue 137) \r
+In order to fork a repository, the user account must have the *fork* permission **and** the repository must *allow forks*. The clone inherits the access list of its origin. i.e. if Team A has clone access to the origin repository, then by default Team A also has clone access to the fork. This is to facilitate collaboration. The fork owner may change access to the fork and add/remove users/teams, etc as required <u>however</u> it should be noted that all personal forks will be enumerated in the fork network regardless of access view restrictions. If you really must have an invisible fork, the clone it locally, create a new repository for your invisible fork, and push it back to Gitblit. \r
+ **New:** *web.allowForking=true*\r
+- Added optional *create-on-push* support \r
**New:** *git.allowCreateOnPush=true*\r
-- Added **experimental** JGit-based garbage collection service. This service is disabled by default.\r
- **New:** *git.allowGarbageCollection=false*\r
- **New:** *git.garbageCollectionHour = 0*\r
- **New:** *git.defaultGarbageCollectionThreshold = 500k*\r
+- Added **experimental** JGit-based garbage collection service. This service is disabled by default. \r
+ **New:** *git.allowGarbageCollection=false* \r
+ **New:** *git.garbageCollectionHour = 0* \r
+ **New:** *git.defaultGarbageCollectionThreshold = 500k* \r
**New:** *git.defaultGarbageCollectionPeriod = 7 days*\r
-- Added support for X509 client certificate authentication (github/kevinanderson1). (issue 106)\r
-You can require all git servlet access be authenticated by a client certificate. You may also specify the OID fingerprint to use for mapping a certificate to a username. It should be noted that the user account MUST already exist in Gitblit for this authentication mechanism to work; this mechanism can not be used to automatically create user accounts from a certificate.\r
- **New:** *git.requireClientCertificates = false*\r
- **New:** *git.enforceCertificateValidity = true*\r
+- Added support for X509 client certificate authentication (github/kevinanderson1). (issue 106) \r
+You can require all git servlet access be authenticated by a client certificate. You may also specify the OID fingerprint to use for mapping a certificate to a username. It should be noted that the user account MUST already exist in Gitblit for this authentication mechanism to work; this mechanism can not be used to automatically create user accounts from a certificate. \r
+ **New:** *git.requireClientCertificates = false* \r
+ **New:** *git.enforceCertificateValidity = true* \r
**New:** *git.certificateUsernameOIDs = CN*\r
- Revised clean install certificate generation to create a Gitblit GO Certificate Authority certificate; an SSL certificate signed by the CA certificate; and to create distinct server key and server trust stores. <u>The store files have been renamed!</u>\r
- Added support for Gitblit GO to require usage of client certificates to access the entire server.\r
-This is extreme and should be considered carefully since it affects every https access. The default is to **want** client certificates. Setting this value to *true* changes that to **need** client certificates.\r
+This is extreme and should be considered carefully since it affects every https access. The default is to **want** client certificates. Setting this value to *true* changes that to **need** client certificates. \r
**New:** *server.requireClientCertificates = false*\r
-- Added Gitblit Certificate Authority, an X509 certificate generation tool for Gitblit GO to encourage use of client certificate authentication.\r
-- Added setting to control length of shortened commit ids\r
+- Added **Gitblit Certificate Authority**, an x509 PKI management tool for Gitblit GO to encourage use of x509 client certificate authentication.\r
+- Added setting to control length of shortened commit ids \r
**New:** *web.shortCommitIdLength=8*\r
-- Added alternate compressed download formats: tar.gz, tar.xz, tar.bzip2 (issue 174)\r
+- Added alternate compressed download formats: tar.gz, tar.xz, tar.bzip2 (issue 174) \r
**New:** *web.compressedDownloads = zip gz*\r
- Added simple project pages. A project is a subfolder off the *git.repositoriesFolder*.\r
- Added support for X-Forwarded-Context for Apache subdomain proxy configurations (issue 135)\r
- Expose ReceivePack to Groovy push hooks (issue 125)\r
- Redirect to summary page when refreshing the empty repository page on a repository that is not empty (issue 129)\r
- Emit a warning in the log file if running on a Tomcat-based servlet container which is unfriendly to %2F forward-slash url encoding AND Gitblit is configured to mount parameters with %2F forward-slash url encoding (Github/jpyeron, issue 126)\r
-- LDAP admin attribute setting is now consistent with LDAP teams setting and admin teams list.\r
+- LDAP admin attribute setting is now consistent with LDAP teams setting and admin teams list. \r
If *realm.ldap.maintainTeams==true* **AND** *realm.ldap.admins* is not empty, then User.canAdmin() is controlled by LDAP administrative team membership. Otherwise, User.canAdmin() is controlled by Gitblit.\r
- Support servlet container authentication for existing UserModels (issue 68)\r
\r