2017-08-31 14 views
0

私は小さなSSLプロキシサーバーを作成しており、アンドロイドアプリクライアントからssl.SSLError: [SSL: SSLV3_ALERT_CERTIFICATE_UNKNOWN] sslv3 alert certificate unknown (_ssl.c:661)を取得し続けますが、ブラウザは取得しません。私はssl.CERT_NONEと設定しました。ここに私のテストコードは次のとおりです。予期しないpyssl証明書エラー

SSLcontext = ssl.SSLContext(ssl.PROTOCOL_SSLv23) 
SSLcontext.load_cert_chain('server.crt', 'server.key') 
SSLcontext.verify_mode = ssl.CERT_NONE 
SSLcontext.check_hostname = False 

s = socket.socket() 
s.bind(('127.0.0.1', 443)) 
s.listen(5) 

c = s.accept()[0] 
c = SSLcontext.wrap_socket(c, server_side = True) 
print c.recv(1024) 

があるため、証明書がAndroidアプリにピン留めたり、私が何か間違ったことをやってるのこのですか?

答えて

0

私は、これは、クライアントがすべてのサーバー証明書の検証を行う方法には影響しませんssl.CERT_NONE

を設定しました。サーバーは証明書を検証しないようにクライアントに指示することはできず、サーバーがこれを行うことができれば深刻なセキュリティ上の問題になります。

SSLV3_ALERT_CERTIFICATE_UNKNOWN ...アンドロイドアプリクライアントのブラウザではなく、ブラウザではありません。

ここで使用する証明書の種類は不明です。これが自己署名されたものであれば、ブラウザに信頼できるものとして一度追加したり、明示的な例外を追加したことがありますが、Androidアプリではこれを実行しませんでした。これがパブリックCAによって発行された証明書である場合、チェーン証明書が不足している可能性があります。デスクトップブラウザは、このサーバー側の問題を回避することがよくありますが、他のクライアントのほとんどはそうしていません。

+0

自己署名入りの証明書を使用しました。私はまた私のブラウザと私のアンドロイドの電話にそれを追加しました。私がここで混乱している理由は、私が 'SSLV3_ALERT_CERTIFICATE_UNKNOWN'で私の検索したように、私のpythonコードがクライアントの証明書を拒否することを意味します。 – logicalway

+0

@logicalway:いいえ、クライアントはサーバ証明書を取得し、それを気に入らず、このアラートをサーバに送り返し、サーバにハンドシェイクを打ち切り、アラートを表示します。したがって、どうやらあなたのAndroidクライアントは証明書が気に入らないのですが、その理由は不明です。クライアントと証明書に関する情報が少なすぎるし、追加した理由も不明です。 –

関連する問題