Installing Subversion
This should make easy using brew from a Mac.
$ brew search subversionIt is important to make sure the version of Subversion installed is compatible with the subversion installed on the server. Subversion 1.7 and 1.8 (1.9 is the latest stable version but I can’t really speak for it) are proven to be working interchangeably, source code checked in using 1.6 may not be easily upgraded.
Certificate Conversion
A certificate is used in subversion server to verify client’s identify.
Typically a certificate (.p12 or .pem) should be assigned to you for this purpose, and it can be converted back and forth to other certificate formats using openssl (more on the conversion in the next section).
In case you don’t know what p12 and pem are, p12 is a certificate format which is fully encrypted and password protected. While pem certificate is just like p12 containing both public key and private key, but also root certificates.
Now, it is jolly good that you have your p12 with you. But a lot of times, you need more than just p12. In this case, a pem file is also required. As a quick guide, I have listed most common commands used to convert certificates.
Convert p12 to pem
$ openssl pkcs12 -nodes -clcerts -in cert.p12 -out cert.pemConvert p12 to pem (with password)
$ openssl pkcs12 -in cert.p12 -out cert.pemExtract certificate from p12
$ openssl pkcs12 -nokeys -in cert.p12 -out cert.crtExtract key from p12
$ openssl pkcs12 -nocerts -in cert.p12 -out cert.keyGenerate p12 from cert and key
$ openssl pkcs12 -export -in foo.cert -inkey foo.key -out foo.p12Convert pem to p12
$ openssl pkcs12 -export -in original.pem -out new.p12Change p12 password
$ openssl pkcs12 -in original.p12 -nodes -clcerts -out temp.pem
$ openssl pkcs12 -export -in temp.pem -out new.p12Configure Subversion to Use Certificate-based Authentication
After installation, Subversion will create a directory structure like the following in home directory.
.subversion
├── README.txt
├── auth
│ ├── svn.simple
│ ├── svn.ssl.client-passphrase
│ ├── svn.ssl.server
│ └── svn.username
├── config
└── serversIn servers file, the following configurations are needed for the extra authentication.
[groups]
lemoncake = repo.lemoncake.com
[lemoncake]
ssl-authority-files = path/to/pem
ssl-client-cert-file = path/to/p12
ssl-client-cert-password = superpassword
# http-proxy-host = www.proxy.lemoncake.com
# http-proxy-port = 80First of all, a group needs to be added with URL to the source control server.
Then in the group definition, a list of detailed settings (including cert and password) are required, with optional settings such as proxy.