1

remote certficate mismatchピアからいくつかのケースでエラーが発生し、サーバー側から問題を追跡できません。

を実行した後int ret = SSL_accept(ssl)、SSL ハンドシェイク中にサーバー (C++ バイナリ) から証明書名とその詳細を取得して印刷する方法はありますか?

使用できる SSL API はありますか?

ありがとう!

4

2 に答える 2

4

SSL_get_certificateSSL セッション構造 (SSL_Accept で返される) を使用して、クライアントに提供される証明書を所有する X509 構造を取得できます。後で、いくつかの X509 固有の関数を使用して、証明書の CN を抽出できます。

X509_NAME_oneline(X509_get_subject_name(certificate), buf, 256);

1 つの証明書で異なる CN を処理できるため、これは素朴なアプローチですが、問題には十分です。

于 2012-07-03T09:03:54.873 に答える
0

私は通常これを「愚かな方法」で行います-キャプチャ

tcpdump -n -s 1500 -w - port 443 and host www.foobar.com | strings

tcpdump -n -s 1500 -w - port 443 and host www.foobar.com | hexdump -C

つまり、ワイヤーをスニッフィングするだけです。通常の(アップグレード以外などの)SSL交換中と同様に、これは平文で交換されます。ASN1はエンコードされていますが、一般名やその他のDNフィールドを簡単に確認できます。

000305e0  06 03 55 04 0b 13 16 77  77 77 2e 71 75 6f 76 61  |..U....www.quova|
000305f0  64 69 73 67 6c 6f 62 61  6c 2e 63 6f 6d 31 20 30  |disglobal.com1 0|
00030600  1e 06 03 55 04 03 13 17  51 75 6f 56 61 64 69 73  |...U....QuoVadis|
00030610  20 47 6c 6f 62 61 6c 20  53 53 4c 20 49 43 41 30  | Global SSL ICA0|
00030620  1e 17 0d 31 31 30 38 30  35 31 30 31 38 30 36 5a  |...110805101806Z|
00030630  17 0d 31 32 30 38 30 35  31 30 31 38 30 36 5a 30  |..120805101806Z0|
00030670  1b 30 19 06 03 55 04 0a  13 12 41 42 4e 20 41 4d  |.0...U....ABN AM|
00030680  52 4f 20 42 61 6e 6b 20  4e 2e 56 2e 31 19 30 17  |RO Bank N.V.1.0.|
00030690  06 03 55 04 0b 13 10 49  6e 74 65 72 6e 65 74 20  |..U....Internet |
000306a0  42 61 6e 6b 69 6e 67 31  16 30 14 06 03 55 04 03  |Banking1.0...U..|

あなたが見るようなものです。これを行う適切な方法は、コールバックに座って証明書スタックを分析することです。

于 2012-07-03T08:18:30.157 に答える