Windows 7, HTTPS WebDav: pergunta por senha duas vezes e falha. Alguma solução alternativa?

7

Eu tenho um servidor Dav correndo com PHP SabreDav ( code.google.com/p/sabredav/wiki/Windows ) em Cherokee em uma URL segura HTTPS. Está configurado para usar https e usa Autenticação Digest. Eu consigo fazer login com vários navegadores e alguns clientes de terceiros (o BitKinex e o Java AnyClient podem se conectar e navegar também, avisos abaixo).

No entanto, ao tentar fazer o login com o Windows 7 (surpresa, surpresa), ele solicita minha senha duas vezes e, em seguida, informa que minha pasta é inválida.

  • Verifiquei que o servidor está usando a autenticação Digest.
  • Eu verifiquei várias vezes que softwares de terceiros podem se conectar.
  • Até saí e comprei um certificado SSL da GoDaddy para que meu SSL não fosse mais assinado automaticamente.
  • Eu apliquei o registro hacks aqui: support.microsoft.com/kb/943280 (Note-se que o artigo diz que a "corrigir" já existe para Windows 7, eu só preciso de mágica hax Registro para fazê-lo funcionar)
  • Eu apliquei os hacks de registro aqui: support.microsoft.com/kb/941050
  • Apliquei os hacks de registro aqui: support.microsoft.com/kb/841215 (supostamente permite a autenticação básica, que não deve ser aplicada, mas por que não?)

Tudo em vão; O Windows continua pedindo minha senha duas vezes e, em seguida, afirma que "A pasta que você inseriu não parece ser válida. Escolha outra."

Experimente a linha de comando? Claro:

  • Eu tentei acessar com NET USE " link " password / USER: me (erro de sistema 59)
  • Eu tentei acessar com o NET USE " link " (erro de sistema 1790)
  • Eu tentei acessar com NET USE " link " password / USER: me (erro de sistema 59)
  • Eu tentei acessar com o NET USE " link " (erro de sistema 1790)
  • Para boa sorte: ping dav.example.com ... funciona. E, novamente, os navegadores da Web podem acessar o compartilhamento muito bem, assim podem ferramentas de terceiros.

Melhor eu posso dizer neste momento é "HAHA, NO WEBDAV PARA VOCÊ no Windows 7", que seria bem exceto todos que vai usar este aplicativo ... usa o Windows 7. E a maioria não são tão persistente ou combativo como Eu sou.

Sinto que já queimei todas as sugestões aleatórias que encontrei em qualquer lugar nas primeiras 10 páginas do Google em todos os termos de pesquisa em que posso pensar. Alguma ideia? Eu preciso que seja Webdav, eu preciso que ele seja HTTPS, e eu realmente preciso de um método para acessá-lo a partir do Windows 7.

DETALHE EXTRA:

No entanto, os programas de "terceiros" que eu tentei foram bugs, incompletos, ou têm bobagens ... "falhas". Por exemplo, o BitKinex parece se fixar em qualquer código de erro HTTP enviado, portanto, se houver uma falha na leitura de um diretório, BAM, esse diretório será sempre listado como vazio. Listagens de diretórios longos também aparecem em branco, mesmo que o painel de transferência mostre que a listagem de diretórios ainda está ocorrendo.

Em qualquer caso, o BitKinex é inútil para fins de desenvolvimento pelas razões acima. E, além disso, estou construindo isso para outras pessoas além de mim mesmo, pessoas que vão querer que esse dav share funcione "da maneira normal".

    
por AutoDMC 29.11.2010 / 05:56

7 respostas

4

Eu odeio o WebDAV.

Recebi esse ódio durante o processo de obtenção do suporte do WebDAV no meu cluster de entrega de arquivos. Isso é baseado no Server 2008 / IIS7, com o plug-in WebDAV para o IIS. É desajeitado, e cada cliente WebDAV individual por aí espera poder conversar com o servidor WebDAV sobre sua própria mistura personalizada do seguinte:

  • Mecanismo de transporte : HTTP ou HTTPS
  • Acompanhamento de sessão : cookies ou cabeçalhos HTTP
  • Autenticação : Autenticação Básica, Digest, Kerberos ou NTLM
  • O suporte à porta personalizada pode ou não estar incluído.
  • A capacidade de se conectar a um diretório raiz pode ou não estar presente; O WinXP certamente não pode se conectar a http://davhost.example.com/ , ele precisa se conectar a http://davhost.example.com/root/

O WinXP e o Win7 se comportam de maneira diferente. As primeiras versões do WinXP não conseguem falar bem sobre o HTTPS. Algumas versões do Windows, esqueci que, no momento, só fiz rastreamento de sessão via cabeçalhos HTTP. Como tenho muito OSX no meu ambiente, 10.3, 10.4, 10.5 e 10.6 alteram sutilmente o que eles suportam em termos de capacidades de servidor. E, claro, o Gnome tem seus próprios requisitos que contaminam nossos poucos usuários de Linux.

eu. Somente. Não pode. Ganhar.

Neste momento, eu tenho o Windows 7 e o WinXP funcionando bem ao servir o WebDAV fora do IIS7. Demorou muito, mas está funcionando. O OSX funciona principalmente para versões mais recentes. Todos os outros aproveitam suas chances.

O Windows espera que determinados verbos do WebDAV estejam disponíveis. Verifique o que seus clientes Win7 estão recebendo quando tentam se conectar e voltar atrás no erro. Se eles não estão recebendo um, é um sinal de que o host do Windows não gosta do ambiente por algum motivo; talvez você precise alterar os métodos de rastreamento de sessão ou precisa garantir que seus hosts DAV estejam na zona de segurança do IE correta. Observar os logs de acesso é o que me permitiu recuar o que o Windows esperava de um servidor WebDAV.

Você pensaria que fazer o WebDAV do IIS para os clientes Windows seria simples, mas você estaria enganado como eu.

    
por 29.11.2010 / 07:11
3

O WebDAV funciona muito bem, exceto pelo fato de que os clientes do WebDAV do Windows estão corrompidos. Por exemplo, a autenticação Digest do Windows Mini Redirector está quebrada. Por alguma razão, parece que é possível mapear o cliente a partir da linha de comando.

A página a seguir explica isso em detalhes: link

Use outro cliente WebDAV ou use um servidor WebDAV, como o BarracudaDrive, que implementa as URLs da sessão. Você faz o login usando um navegador e usa o URL da sessão fornecido pelo navegador ao mapear a unidade.

    
por 29.11.2010 / 17:04
3

Eu encontrei o mesmo problema e resolvi o problema. Para simplificar, existem várias causas comuns do problema.

  1. problema de namespace da resposta dav
  2. problema de conexão

Expliquei esse problema detalhadamente em meu blog :

Why Digest Authentication Fails in Windows 7 Mini-redirector

JUN 2ND, 2014

Here is the problem: you have a WebDAV server, it works with almost all WebDAV clients except Windows 7 mini-redirector when using Digest Authentication.

Admittedly, why choosing Digest Authentication and sticking with Windows 7 mini-redirector in itself might be a debate. This article does not discuss about design options such as this. It only aims to share what I’ve learned struggling with the Microsoft’s WebDAV client so that other folks won’t pay the price in the future.

The usual way to connect to a WebDAV server from Win7 is to open up a Windows Explorer window, map a net drive to the url of the server. If the server is protected by Digest Authentication, you will be prompted to enter your username and password. You type in, submit, and it pops up another box, asking you for credentials again. You keep typing the correct credentials 3 times, and Windows will not allow you keep trying.

This is the problem I was facing. Making things more interesting, the problem could be masked when Fiddler the web debugger is present. That is to say, whenever Fiddler is the man in the middle, it works; otherwise, it stops working.

I tried to approach this problem from many directions which I will cover later in this post, but all didn’t solve the problem.

I was a big step forward when I discovered that Fiddler has two connection related options: “Reuse client connection” and “Reuse server connection”, both are turned on by default for peformance reason I suppose. The working/not working scenarios I described earlier could be reproduced by toggle “Reuse client connection” on/off, without shutting down the Fiddler completely.

By comparing the connection patterns of my session with the session between Win 7 client and Apache, the difference turned out to be that my WebDAV server always drops the connection, especially upon returning 400 series of HTTP status code, for example, 401 Unauthorized. The fix is simple, keeping the connection alive upon 401 solves the problem immediately.

My coworker, a seasoned developer, told me this is an ancient bug of Microsoft, which existed for over 12 years but they never fixed it. The client starts a TCP connection, C, and then sends a plain HTTP request, the server will generate a 401 response together with “WWW-Authenicate” header, including the Digest information, sends it back to the client. At this particular moment, the server has the choices to either keep the connection alive, or drops it, regardless of what the “Connection”, “Keep-Alive” header says earlier. Say the server decided to drop the connection, when the 401 response get to the win 7 client, it will compute an “Authorization” header needed for Digest Authentication, however, win 7 client insists to send this header along through the connection C created earlier, if C is broken, it will start a new connection, C’, send a plain request WITHOUT the “Authorization” header. At this point, you should be able to predict what is going to happen next and to explain why the multiple login problems exist ever.

To summary the above process, the Win 7 client will ONLY send the “Authorization” header upon two conditions: 1. right after you submit the credentials, i.e. when “Authorization” header was created the first time; 2. the connection was the same connection through which it sent the original plain request and got the 401 response.

HTTP is a stateless protocol, neither client nor server should rely on any states such as the connection status. A robust server such as Apache with WebDAV module enabled or a robust client such as Cadaver is able to cope with a rigid client such as win 7 client, or a rigid server such as my server.

WebDAV with Digest is hard to get right, I only saw two servers made it right so far, one is the popular Apache DAV module, the other is my server after fixing this bug.

Win 7 WebDAV support is indeed crappy. There are many other choices for your customers. Cadaver is an excellent open source WebDAV client on Linux/Unix platforms, Mac has build-in WebDAV support, and third party clients such as Cyber Duck, BitKinex, etc. are all good choices. However, if a large portion of your customers are still relying on Windows platform thus Win7 mini-redirector is still their most convenient way to access their WebDAV server, you may still need to make it work for the customers. Here are some other possible causes that the Digest Authentication that does not work.

  1. Your authentication logic is implemented wrong so it won’t accept even correct credentials
  2. The DAV response body uses default namespace, refer to the links below for further details: http://www.greenbytes.de/tech/webdav/webdav-redirector-list.html#issue-namespace-handling https://issues.apache.org/bugzilla/show_bug.cgi?id=49428
  3. If you are sending “Authentication-Info” header, be sure to make it work If > all sending “Authentication-Info” header, be sure to make it work

If all of these does not help you, here are some approaches I found useful when hunting for the root cause: 1. Use Fiddler, ngrep to capture and study the traffic 2. Use open source clients and servers as base reference. You could know the machinery of process by reading the code; the code is well tested and reliable 3. Expand your perspectives. If HTTP communication does not work, the reason might be the traffic (content), timeout (timing), connection (context),etc. 4. Remember the old fact: HTTP is stateless. No assumptions should be made based on any states added 5. Read the RFC carefully and do not hesitate to ask questions online

To wrap up, Digest Authentication is a scheme stronger than Basic. Basic literally provides no protection in terms of today’s security technologies and Digest is inherently vulnerable to man in the middle attack. Please think carefully which security context are you using them in.

    
por 18.06.2014 / 21:10
2

Existe um kb no microsoft.com que diz que, se houver um diretório filho na URL, como link , isso é webdav mas o pai não é um web7 win7 e o servidor win 08 tentará autenticar contra o pai que NÃO é um webdav. a correção está aqui: link

Confirmei que funciona como pretendido, se configurado desta forma. Acho que a outra opção seria usar um subdomínio webdav como o link que aponta para o diretório do seu webdav.

    
por 22.01.2013 / 20:20
0

O BitKinex é o único programa que encontrei que fará o webdav com um certificado auto-assinado no windows 7. Eu tinha algumas esperanças para o Cyberduck, mas descobri que ele tem o mesmo problema, pede senha duas vezes mais e morre. Aparentemente, o pessoal do BitKinex descobriu algum segredo profundo e escuro de win7 webdav com auto-assinatura que só é liberado para certos membros das sociedades secretas. LOL BitKinex faz o trabalho incrível e tem agendadores e tudo mais.

    
por 14.01.2011 / 04:16
0

Eu tentei autenticação básica e digest (por meio de https) e não consegui nada para trabalhar um cliente do Windows 7.

A única maneira que eu encontrei até agora de fazer isso funcionar no Windows 7 sem um cliente de terceiros era dispensar a autenticação de nome de usuário / senha e substituí-la pela autenticação de certificado de cliente. Minha estrofe de diretórios agora é assim:

<Directory /dav/dir>
AllowOverride None
Options Indexes -Includes FollowSymLinks
DirectoryIndex None
SSLRequireSSL
SSLVerifyClient require
SSLVerifyDepth 10
SSLRequire %{SSL_CLIENT_S_DN_O} eq "Org 1" or \
  (%{SSL_CLIENT_S_DN_O} eq "Org 2" and %{SSL_CLIENT_S_DN_OU} eq "Org Unit 1")
DAV On
</Directory>

A sub-rotina SSLRequire deve ser modificada de acordo com suas próprias necessidades.

Depois disso, instale um certificado no lado do cliente. Eu gero e distribuo meus próprios certificados usando TinyCA2 . Ou simplesmente use uma autoridade de certificação de terceiros.

    
por 05.10.2011 / 09:26
0

temos um webdav https em um servidor por trás de um proxy reverso do Apache. e o serviço webclient no windows não inicia, a montagem falha com o nome da rede 0x80070043 ...

resolvemos isso reescrevendo a resposta do primeiro pedido do windows explorer para 200 OK em vez de um redirecionamento 302. então o webclient iniciará e será bem-sucedido.

exemplo de regras do apache:

RewriteEngine On
RewriteCond %{REQUEST_URI} ^(/)$ [NC]
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]

Atualização: nós tivemos o mesmo problema com duas vezes Logins e eu resolvi com adição seguinte para a configuração do vache Apache (no proxy reverso):

DefaultType None
    
por 11.11.2016 / 08:11