Difference between revisions of "Git, Apache and HTTPS with a free certificate"

From Wiki de Caballero
Jump to navigation Jump to search
Line 7: Line 7:


==Git using Apache==
==Git using Apache==
This is a basic setup to allow Git on a server to be accessible via HTTP (no HTTPS yet, read further).
# Install Apache <source lang="bash">
# Install Apache <source lang="bash">
sudo apt-get install apache2 apache2-utils
sudo apt-get install apache2 apache2-utils
Line 13: Line 15:
a2enmod cgi alias env
a2enmod cgi alias env
</source>
</source>
# (Optional) Add user(s) to the htpasswd file.
# '''(Optional)''' Add user(s) to the htpasswd file. This step is optional if this setup is going to serve only anonymous repository (pull/fetch). However if you want to push or if you want to allow to only obtain a repository using user/pass combo this step is necessary (see next step).<source lang="bash">
# Create file and add a user
# -c = create file
# The file is stored in /git/ the git repository for this specific setup
htpasswd -c /git/.htpasswd [user name]
# This will ask for a password
 
# Add a user to the file
htpasswd /git/.htpasswd [user name]
</source>
# To allow to obtain a git repository using http, add the following to the apache2.conf <source lang="bash">
# To allow to obtain a git repository using http, add the following to the apache2.conf <source lang="bash">
# Path to the Git directory (inside the OS)
# Path to the Git directory (inside the OS)
Line 40: Line 51:
</source>
</source>


* (very useful) https://git-scm.com/book/en/v2/Git-on-the-Server-Smart-HTTP
Additional info:
* (useful with last) https://git-scm.com/docs/git-http-backend
* [https://git-scm.com/book/en/v2/Git-on-the-Server-Smart-HTTP Git - Smart HTTP]
 
* [https://git-scm.com/docs/git-http-backend Git - git-http-backend Documentation]
More sites:
* For more info on htpasswd, read the docs.
* https://maymay.net/blog/2008/08/08/how-to-use-http-basic-authentication-with-git/


==Self signed Certificate==
==Self signed Certificate==

Revision as of 19:44, 22 June 2017

Prerequisites

  • Ubuntu CLI understanding
  • Git knowledge
  • Ubuntu, this was tested using Ubuntu 16
  • Apache 2

Git using Apache

This is a basic setup to allow Git on a server to be accessible via HTTP (no HTTPS yet, read further).

  1.  Install Apache
    sudo apt-get install apache2 apache2-utils
  2. Enable necessary modules
    a2enmod cgi alias env
  3. (Optional) Add user(s) to the htpasswd file. This step is optional if this setup is going to serve only anonymous repository (pull/fetch). However if you want to push or if you want to allow to only obtain a repository using user/pass combo this step is necessary (see next step).
    # Create file and add a user
    # -c = create file
    # The file is stored in /git/ the git repository for this specific setup
    htpasswd -c /git/.htpasswd [user name]
    # This will ask for a password
    
    # Add a user to the file
    htpasswd /git/.htpasswd [user name]
  4. To allow to obtain a git repository using http, add the following to the apache2.conf
    # Path to the Git directory (inside the OS)
    SetEnv GIT_PROJECT_ROOT /git
    
    # Allows all projects to be served
    # If commented a file must exist in each available repository via Apache, file name: git-daemon-export-ok
    SetEnv GIT_HTTP_EXPORT_ALL
    
    # Defines the URL path where git is located, as seen via http
    # First param is path, second is os path to git-http-backend, don't forget the last slash
    ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
    
    # Access configuration
    <Files "git-http-backend">
    	# Enable Basic HTTP Authentication
    	AuthType Basic
    	AuthName "Git Access"
    	AuthUserFile /git/.htpasswd
    	# The following line allows to obtain a repository (pull/fetch) without having a user/pass combo
    	# Comment it if user/pass are needed to obtain info as well
    	Require expr !(%{QUERY_STRING} -strmatch '*service=git-receive-pack*' || %{REQUEST_URI} =~ m#/git-receive-pack$#)
    	Require valid-user
    	# END Enable Basic HTTP Authentication
    </Files>

Additional info:

Self signed Certificate

How Certificates work

More info:

How to

How to create a Root Certificate authority and child certificates:

Other sites:

Adding the certificate to Apache

Ensuring the right protocol:

Other links:

Configuring Git to use the self signed certificate

More sites:

Client based authentication using certificates in Apache

Used links:

Other links:

(Possibly) Giving Git a Client Certificate

More (possibly useful) info