Reconfigure o Apache para servir um repositório Subversion via HTTPS (ao invés de HTTP)

1

Eu tinha uma configuração de trabalho do Apache, Redmine (3.3.2.stable), bem como Subversion (1.6.17); o servidor é um Mac OS X 10.6.8 Snow Leopard. As preocupações de segurança nos levaram a alterar o protocolo do servidor para HTTPS, portanto, assinamos com nossa autoridade de certificação. Então, tudo isso está em execução e todas as páginas da web agora são fornecidas por HTTPS, exceto pelo repositório SVN.

Tentar fazer check-out do HTTTP SVN original gera isso:

svn co http://my.domain/svn/repos .
svn: E175011: Unable to connect to a repository at URL 'http://my.domain/svn/repos'
svn: E175011: Repository moved temporarily to 'https://my.domain/svn/repos'; please relocate

Então, eu acho que isso é justo, já que tecnicamente foi realmente realocado. Tentar o mesmo comando com a opção HTTPS me fornece isso:

svn co https://my.domain/svn/repos .
Error validating server certificate for 'https://my.domain:443':
- The certificate is not issued by a trusted authority. 
Use the fingerprint to validate the certificate manually!
Certificate information:
- Hostname: my.domain
- Valid: from Apr 26 13:22:21 2017 GMT until Jul  9 23:59:00 2019 GMT
- Issuer: CA, DE([email protected])
- Fingerprint: ...
(R)eject, accept (t)emporarily or accept (p)ermanently? t
Authentication realm: <https://my.domain:443> Redmine SVN Repository
Password for 'admin':

E isso também é bom, exceto que não aceita nenhuma das contas do Redmine User (ou as contas do sistema local). Por que vale a pena, dou-lhe a parte relevante do log do servidor:

[Tue May 09 14:38:12 2017] [error] "DAV Off" cannot be used to turn off a subtree of a DAV-enabled location.
[Tue May 09 14:38:12 2017] [error] [client IP] mod_auth_apple: User admin: authentication failure for "/svn": User not found by checkpw
[Tue May 09 14:38:12 2017] [error] [client IP] mod_auth_apple: User admin: authentication failure for "/svn": User not found in htaccess file

Espero que alguém tenha tentado fazer algo assim em um servidor Mac antes. Idealmente, eu gostaria de instruções passo a passo sobre como alterar a configuração do servidor SVN de HTTP para HTTPS; isso pelo menos deve estar em algum lugar lá fora (eu não encontrei nada até agora). Obrigado por todos os ponteiros.

EDIT: Eu colo o código relevante do httpd.conf abaixo:

#this handles SVN authentication through Redmine DB
# /svn location for users
PerlLoadModule Apache::Redmine
<Location "/svn">
DAV Off
SVNParentPath "/usr/local/svn"
Order deny,allow
Deny from all
Satisfy any
# If a client tries to svn update which involves updating many files,
# the update request might result in an error Server sent unexpected
# return value (413 Request  Entity Too Large) in response to REPORT
# request,because the size of the update request exceeds the limit
# allowed by the server. You can avoid this error by disabling the
# request size limit by adding the line LimitXMLRequestBody 0
# between the <Location...> and </Location> lines. 
LimitXMLRequestBody 0
# Only check Authentication for root path, nor again for recursive
# folder.
# Redmine core does only permit access on repository level, so this
# doesn't hurt security. On the other hand it does boost performance
# a lot!
SVNPathAuthz off
PerlAccessHandler Apache::Authn::Redmine::access_handler
PerlAuthenHandler Apache::Authn::Redmine::authen_handler
AuthType Basic
AuthName "Redmine SVN Repository"
AuthUserFile /dev/null
#read-only access    
<Limit GET PROPFIND OPTIONS REPORT>
    Require valid-user
    Satisfy any
</Limit>
# write access
<LimitExcept GET PROPFIND OPTIONS REPORT>
    Require valid-user
</LimitExcept>
## for mysql
RedmineDSN "DBI:mysql:database=redmine;host=localhost"
RedmineDbUser 'user'
RedmineDbPass 'password'

    
por Sebastian Sulger 09.05.2017 / 14:46

2 respostas

2

Isso agora está funcionando. Acontece que a configuração do Apache foi alterada para incluir a linha DAV Off dentro da diretiva <Location "/svn"> . Isso deve ser realmente DAV svn (consulte link ). Após essa alteração, o check-out do repositório funcionou novamente (depois de aceitar o certificado do servidor). Navegar no repositório a partir do Redmine ainda não funcionou, uma vez que a instalação do Redmine ainda apontava para o endereço antigo (http) do repositório. Esta foi uma questão de emitir um comando MySQL como visto aqui: link (no meu caso, eu era capaz para usar o phpMyAdmin para isso).

    
por 16.05.2017 / 15:41
0

Parece que você está tentando acessar seu repositório do subversion com o ID de usuário 'admin'. Isto é provavelmente devido ao fato de você não fornecer um ID de usuário explícito, assim o ID do usuário que emite o comando svn será obtido. No seu exemplo acima, isso parece ser 'admin'.

Em seguida, a julgar pelas entradas de log, o servidor solicita a autenticação do usuário 'admin', mas este usuário não pode ser encontrado nem por checkpw nem em um arquivo htaccess.

Você deve adicionar admin ao arquivo htaccess ou, mais provavelmente, no seu comando svn você deve fornecer um ID de usuário que exista no seu servidor OS X ou no arquivo htaccess. Por exemplo:

svn co https://[email protected]/svn/repos .
    
por 09.05.2017 / 18:49