web-dev-qa-db-ja.com

httpsが機能しないのはなぜですか?

サイトのルートのみをhttpsにリダイレクトしようとしています。書き換えは行われますが、httpsでは何も起こりません。ブラウザは言う。 connecting to thinkingmonkey.me...と停滞。

  • Listen 80Listen 443がconfファイルに存在します。
  • Httpdを再起動しました。
  • 適切な証明書ファイルと秘密鍵ファイルを使用しています。
  • httpdログSSLログにはエラーはありません(SSlには別のログがあります)。
  • 文字通り、 https://thinkingmonkey.me に直接アクセスしようとしても、SSLアクセスログには何も記録されていません。

A netstat -pant | grep httpdにはこれがあります:

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name  
tcp        0      0 :::443                      :::*                        LISTEN      1334/httpd          
tcp        0      0 :::80                       :::*                        LISTEN      1334/httpd   

.htaccess:

RewriteEngine on
RewriteBase /

RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^(.*)$ https://thinkingmonkey.me [L,R=302]

rewritelogデータ:

my-ip--[24/Jan/2012:19:01:14 +0000] [thinkingmonkey.me/sid#7fa2335ceb18][rid#7fa2339336d8/initial](2)init rewrite engine with requested uri /

my-ip--[24/Jan/2012:19:01:14 +0000] [thinkingmonkey.me/sid#7fa2335ceb18][rid#7fa2339336d8/initial](1)パススルー/

my-ip--[24/Jan/2012:19:01:14 +0000] [thinkingmonkey.me/sid#7fa2335ceb18][rid#7fa2339336d8/initial](3)[perdir/mysite /]ディレクトリごとのプレフィックスを取り除く:/ mysite /->

my-ip--[24/Jan/2012:19:01:14 +0000] [thinkingmonkey.me/sid#7fa2335ceb18][rid#7fa2339336d8/initial](3)[perdir/mysite /]パターン '^(。*)$'をuriに適用しています ''

my-ip--[24/Jan/2012:19:01:14 +0000] [thinkingmonkey.me/sid#7fa2335ceb18][rid#7fa2339336d8/initial](4)[perdir/mysite /] RewriteCond:input = '80 'pattern = '80' =>一致

my-ip--[24/Jan/2012:19:01:14 +0000] [thinkingmonkey.me/sid#7fa2335ceb18][rid#7fa2339336d8/initial](4)[perdir/mysite /] RewriteCond:input = '/' pattern = '^/$' =>一致

my-ip--[24/Jan/2012:19:01:14 +0000] [thinkingmonkey.me/sid#7fa2335ceb18][rid#7fa2339336d8/initial](2)[perdir/mysite /]書き直す ''-> ' https://thinkingmonkey.me '

my-ip--[24/Jan/2012:19:01:14 +0000] [thinkingmonkey.me/sid#7fa2335ceb18][rid#7fa2339336d8/initial](2)[perdir/mysite /] https://thinkingmonkey.me で明示的にリダイレクトを強制する

my-ip--[24/Jan/2012:19:01:14 +0000] [thinkingmonkey.me/sid#7fa2335ceb18][rid#7fa2339336d8/initial](1)[perdir/mysite /]エスケープ https://thinkingmonkey.me リダイレクト用

my-ip--[24/Jan/2012:19:01:14 +0000] [thinkingmonkey.me/sid#7fa2335ceb18][rid#7fa2339336d8/initial] (1)[perdir/mysite /]リダイレクト https://thinkingmonkey.me [REDIRECT/302]

これが私の仮想ホストです。

<VirtualHost *:80>
     ServerName thinkingmonkey.com
     ServerAlias www.thinkingmonkey.com  www.thinkingmonkey.me

     RewriteEngine on
     RewriteCond %{HTTP_Host} ^(www\.)?thinkingmonkey\.(com|me)$ [NC]
     RewriteRule ^ http://thinkingmonkey.me%{REQUEST_URI} [L,R=301]
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot /mysite/
    ServerName thinkingmonkey.me
    ErrorLog logs/site-error_log
    CustomLog logs/site-access_log common
    RewriteEngine On
    RewriteLog "/var/log/rewrite.log"
    RewriteLogLevel 3
</VirtualHost>

<VirtualHost *:443>

ServerName thinkingmonkey.me

ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn

SSLEngine on

SSLProtocol all -SSLv2

SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW


SSLCertificateFile /path/to/my.crt
SSLCertificateKeyFile /path/to/my.key
SSLCertificateChainFile /path/to/my.ca-bundle


<Files ~ "\.(cgi|shtml|phtml|php3?)$">
    SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent ".*MSIE.*" \
     nokeepalive ssl-unclean-shutdown \
     downgrade-1.0 force-response-1.0

CustomLog logs/ssl_request_log \
      "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>

lsof -i -P | grep 443
httpd    1334     root    6u  IPv6   3297      0t0  TCP *:443 (LISTEN)
httpd    1335   Apache    6u  IPv6   3297      0t0  TCP *:443 (LISTEN)
httpd    1336   Apache    6u  IPv6   3297      0t0  TCP *:443 (LISTEN)
httpd    1337   Apache    6u  IPv6   3297      0t0  TCP *:443 (LISTEN)
httpd    1338   Apache    6u  IPv6   3297      0t0  TCP *:443 (LISTEN)
httpd    1339   Apache    6u  IPv6   3297      0t0  TCP *:443 (LISTEN)
httpd    1340   Apache    6u  IPv6   3297      0t0  TCP *:443 (LISTEN)
httpd    1341   Apache    6u  IPv6   3297      0t0  TCP *:443 (LISTEN)
httpd    1342   Apache    6u  IPv6   3297      0t0  TCP *:443 (LISTEN)

ここで何が問題になっていますか?

9
ThinkingMonkey

OK、これを試してください:

telnet localhost 443

それは応答しますか、それともハングしますか?応答している場合は、次のようになります。

$ telnet localhost 443
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.

(Telnetがインストールされていない場合は、インストールしてください。Telnetセッションを終了するには、control-]を押し、「q」と入力して終了します)

ローカルインターフェースでウェブサーバーに接続でき、ログが与えられていてウェブサーバーが実行されている場合、ファイアウォールの問題があります(ファイアウォールを設定していないと言っていましたが、これにより確認)。その場合は、以下を実行します。

iptables -L -n

結果を投稿します。

更新

コメントから、これはEC2インスタンスなので、このインスタンスに関連付けられているセキュリティグループを見てください。セキュリティグループでtcp/443を許可していることを確認してください。

このような何かが役立つかもしれません:

http://cloud-computing.learningtree.com/2010/09/24/understanding-Amazon-ec2-security-groups-and-firewalls/

13
cjc

同様の問題、Apache2は443に応答し、ログには何もありませんでした

/etc/Apache2# openssl s_client -connect localhost:443 -state -debug

私に次のものをくれました

SSL_connect:unknown state
read from 0x1182fe0 [0x1189010] (7 bytes => 7 (0x7))
0000 - 48 54 54 50 2f 31 2e                              HTTP/1.
SSL_connect:error in unknown state
139790287365792:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:795:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 295 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE

問題は、my.domain.comが仮想ホストで構成されたものとは異なるIPであるということでした。サーバーは2つのIPを使用するため。そのため、Apacheは443で応答していましたが、Webサイトを接続に接続できませんでした。 IPと一致し、すべて良好です

2
David Granic

デュアルスタックホストでは、:: 443をリッスンすると、IPv4とIPv6の両方でリッスンします。 TLSネゴシエーションを自分でテストします。

openssl s_client -connect localhost:443
[lots of negotiation output, to ensure the basics are there]

次に、HTTP応答があるかどうかをテストできます。

GET / HTTP/1.0

ここに私がリダイレクトする方法があります:

<VirtualHost *:80>
    ServerName mail.example.com

    RewriteEngine On
    RewriteLog /var/log/Apache2/rewrite.log
    RewriteLogLevel 4
    RewriteRule ^(.*)$ https://secure.example.com/mail$1 [R,L]
</VirtualHost>

本番環境でRewriteLogRewriteLogLevelを削除してください。削除しないと、ディスクが無意味にいっぱいになる可能性があります。

2
Luis Bruno

開いた httpd.confと下の行が存在するかどうかを確認します。

LoadModule ssl_module modules/mod_ssl.so

そうでない場合は、httpd.confこれで、Apacheを再起動します。

1
navin

SSLキーが設定されていない場合(またはgremlinsによって不可解にコメント化されている場合)、Apache 2.2 SSLは警告なしに失敗します。ログにはエラーがなく、443をリッスンしていません。http:80サイトは機能します。

0
user3062014

プロバイダーが提供しているSSLポリシーの種類を再確認する価値があります。大量のデバッグを行った後、SSL証明書の支払いを行うまで、ホスティングプロバイダーがポート443を外部でロックしたことが原因であることがわかりました。 LetsEncryptを使用することを計画していましたが、その前にホストを切り替える必要があります。とにかく、他のソリューションがどれも役に立たず、VPS環境(またはネットワークを制御できない可能性がある環境)にいる場合は、これを再確認する価値があります。

0
Jackson Gabbard