Назад | Перейти на главную страницу

Перенастройте Apache для обслуживания репозитория Subversion по HTTPS (вместо HTTP)

У меня была рабочая установка Apache, Redmine (3.3.2.stable), а также Subversion (1.6.17); сервер - Mac OS X 10.6.8 Snow Leopard. Проблемы безопасности побудили нас изменить протокол сервера на HTTPS, поэтому мы подписались в нашем центре сертификации. Итак, все работает, и все веб-страницы теперь обслуживаются через HTTPS, за исключением репозитория SVN.

Попытка проверить исходный HTTTP SVN дает следующее:

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

Так что, думаю, это справедливо, поскольку технически он действительно был перемещен. Однако использование той же команды с опцией HTTPS дает мне следующее:

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(ca@my-ca-auth.de)
- Fingerprint: ...
(R)eject, accept (t)emporarily or accept (p)ermanently? t
Authentication realm: <https://my.domain:443> Redmine SVN Repository
Password for 'admin':

И это тоже нормально, за исключением того, что он не принимает ни одну из учетных записей пользователей Redmine (или учетные записи локальной системы, если на то пошло). На всякий случай я даю вам соответствующую часть журнала сервера:

[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

Надеюсь, кто-то уже пробовал сделать что-то подобное на сервере Mac раньше. В идеале мне нужны пошаговые инструкции о том, как изменить настройку SVN-сервера с HTTP на HTTPS; это по крайней мере должно быть где-то там (просто я пока ничего не нашел). Спасибо за любые указатели.

РЕДАКТИРОВАТЬ: я вставляю соответствующий код из httpd.conf ниже:

#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'

Теперь это работает. Оказалось, что конфигурация Apache была изменена, чтобы включить строку DAV Off внутри <Location "/svn"> директива. Это действительно должно быть DAV svn (видеть http://www.redmine.org/projects/redmine/wiki/Repositories_access_control_with_apache_mod_dav_svn_and_mod_perl). После этого изменения проверка репозитория снова заработала (после принятия сертификата сервера). Просмотр репозитория из Redmine по-прежнему не работал, поскольку установка Redmine по-прежнему указывала на старый (http) адрес репозитория. Это было связано с запуском команды MySQL, как показано здесь: http://www.redmine.org/boards/1/topics/14577 (в моем случае я смог использовать для этого phpMyAdmin).

Похоже, вы пытаетесь получить доступ к своему репозиторию Subversion с идентификатором пользователя admin. Вероятно, это связано с тем, что вы не предоставляете явный идентификатор пользователя, поэтому будет использован идентификатор пользователя, который выдает команду svn. В приведенном выше примере это похоже на admin.

Далее, судя по записям в журнале, сервер запрашивает аутентификацию пользователя admin, но этого пользователя нельзя найти ни с помощью checkpw, ни в файле htaccess.

Вы должны либо добавить администратора в файл htaccess, либо, что более вероятно, в своей команде svn вы должны указать идентификатор пользователя, который существует на вашем сервере OS X или в файле htaccess. Например:

svn co https://validuser@my.domain/svn/repos .