2012-02-22 15 views
0

私はウェブサイト(www.trailmyx.com)で小規模事業を運営しているウェブサーバーを持っています。最近、私はいくつかの基本的なSSLソケットコード(C++)を開発し始めました。そして、私はOpenSSlに接続し、http GETを行う小さなテストプログラムを書いていました。自分のクライアント以外のポート443(または他のサイト)のwww.google.comに対してクライアントを正常に使用できます。SSLコードがMYウェブサーバーに対してのみ失敗するのはなぜですか?

自分のサーバーに対してSSL_get_verify_result(ssl)を実行しようとすると、X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERTが返されます。

ブラウザ(https://www.trailmyx.com)で自分のWebサイトにアクセスすると、私は証明書を調べることができ、すべてが正常に見えます...自己署名されたものとして表示されません。

同様に、自分のサーバーに対してwgetを使用すると、同じ自己署名証明書エラーが発生します。

どういうわけか私のサイトが誤って設定されていますが、もしそうなら、どのようにブラウザがそれを行うことができますか? OpenSSLのいくつかの他のシーケンスは、ブラウザが作ることを知っていますか?

注:私のサーバーに対するwgetが返されると、証明書からいくつかの情報が出力されます。/C = -/ST = SomeState/L = SomeCity/O = SomeOrganization/OU = SomeOrganizationalUnit)何らかの理由で、特定の状況下で、Apacheが自己署名証明書を返すことを強く疑う... しかし、なぜ?ブラウザはどうしていますか? BTW- CURLはうまく動作します。 the documentationによると

+1

を多分信頼できるCAののブラウザのリストには、OpenSSLを使用しているものとは違うのですか? –

+0

@BrendanLong - もしそうなら、なぜSELF_SIGNED_CERTエラー?より一般的なエラーの代わりに、それは単に認証に失敗しましたか? – dicroce

+0

また、wget https://www.godaddy.com(私のサーバに対して失敗する)はhttps://www.godaddy.com(CAは誰ですか)に対して働きます... – dicroce

答えて

0

X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT:自己署名証明書

渡された証明書は自己署名であり、同じ証明書が信頼できる証明書のリストで見つけることができません。

は、あなたのCAを信頼しないという意味です。 GoDaddyは古くて、trusted by just about everyoneなので奇妙です。

-CAFile optionを使用して、CAの別のリストに対して実行してみてください。

編集:中間証明書が不足している可能性もあります。 this questionを参照してください。あなたが持っている場合は基本的には:

  • Aあなたは

B

  • B信託を信頼し、あなたはAの証明書と証明書を持っているが、その後、あなたはまだ仕事をする検証のためのBの証明書が必要になります。

  • 5

    私はopenssl s_client -connect www.trailmyx.com:443 -showcertsを試みたし、それが実際に自己署名と証明書を示しています

    Server certificate subject=/C=--/ST=SomeState/L=SomeCity/O=SomeOrganization/OU=SomeOrganizationalUnit/CN=ip-97-74-119-124.ip.secureserver.net/[email protected] issuer=/C=--/ST=SomeState/L=SomeCity/O=SomeOrganization/OU=SomeOrganizationalUnit/CN=ip-97-74-119-124.ip.secureserver.net/[email protected]

    たぶん、あなたのサーバがSSLに組み合わせた名前ベースのバーチャルホストを許可するServer Name Indication(SNI)を使用していますか?

    更新:私の勘違いは正しかった:それが機能するためには、SNIとTLSを使用する必要があります。このコマンドは、予想の証明書を示しています。

    openssl s_client -connect www.trailmyx.com:443 -servername www.trailmyx.com -tls1

    +0

    実際には、 -tls1、それでも検証できます。 – dicroce

    +0

    @dicroce:おそらく、グローバルOpenSSL設定のような設定に依存します。私は私のUbuntuサーバーに-tls1が必要でした。明示的に '-no_tls1'を実行すると、私は間違った証明書を取得するので、TLSが必要であることは明らかです。 –

    関連する問題