web-dev-qa-db-ja.com

SSLを介したSVN:コミット時に多くの再接続

セルフセットアップでEC2でホストされている当社のSVNサーバーはかなり遅いです。セットアップはApacheとmod_dav_svnに基づいています。 CIシステムで使用されているように見えるsvnserveも実行されています。サーバー証明書とクライアント証明書を使用してSSLを使用してリポジトリにアクセスできますが、Wiresharkでコミットを監視しているときに奇妙なことに気づきました。

接続を確立するためのSSLハンドシェイクがあり、その接続がセッション全体で再利用されることを期待していました。ただし、200ms/10kbごとに、新しいTCP新しいSSLハンドシェイクとの接続があるようです(証明書が原因で、SVNトラフィック自体よりも高いペイロードが発生します)。

SVNコミット中の会話。接続ごとに最大10kbのデータが転送されることに注意してください。

conversations during a commit

パケットとしてのコミットの開始。私が知る限り、サーバーはSSL接続を閉じるために暗号化されたアラートを送信します。次に、次の握手が表示されます...

enter image description here

Apache ssl.conf:

LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

SSLVerifyClient optional
SSLUserName SSL_CLIENT_S_DN_CN
SSLCARevocationFile /etc/httpd/ssl/xxx-revoke.pem

<Location /svn/repos>
    DAV svn
    SVNPath /path/svn/repos
    SSLRequireSSL
    SSLRequire (%{SSL_CLIENT_S_DN_O} in {"c1", "c2"}) and !(%{SSL_CLIENT_S_DN_CN} in {"old1", "old2"})

   # Allow large files
   LimitXMLRequestBody 0
   LimitRequestBody 0
</Location>

TortoiseSVN GUI/cliクライアントを使用しています。サーバー側の構成が間違っていると思いますが、同意しますか?ヒントはありますか?

1
Tarnschaf

さて、私はそれらの再接続の解決策をすでに見つけました。他の誰かがそれを検索した場合に備えて、質問を削除しないでください。

httpd.conf

-KeepAlive Off
+KeepAlive On

-MaxKeepAliveRequests 100
+MaxKeepAliveRequests 1000

キープアライブがオフの場合、Apacheは各リクエストの後に接続を閉じます。そのため、再接続と証明書が非常に多く見られました。

これらおよびその他のパフォーマンスのヒントは、 SVNマニュアル にあります。

2
Tarnschaf