2016-04-06 25 views
0

gSoapを使用して固定IPアドレスで知られているサーバーに接続しています。gSoap:IP経由でSSL/TLS証明書のホスト名が一致しない接続

サーバー証明書にこのIPアドレスの「サブジェクト代替名」エントリが含まれているため、これが機能すると思います。しかし、 "tcp_connectにSSL/TLS証明書のホスト名が一致しません"というメッセージが表示されます。

この問題について検索すると、this SE postが見つかりました。そこに示されたコードを見てみると、私は唯一のDNS名がURLに対してテストされていることが判明し、いないIPアドレス(stdsoap2.cpp):

if (nval && !strcmp(nval->name, "DNS") && !strcmp(nval->value, host)) 
{ ok = 1; 
    break; 
} 

が、私はこのようなコードを変更することにより、作業の接続を行うために管理:

if (nval && !strcmp(nval->name, "DNS") && !strcmp(nval->value, host)) 
{ ok = 1; 
    break; 
} 

if (nval && !strcmp(nval->name, "IP Address") && !strcmp(nval->value, host)) 
{ ok = 1; 
    break; 
} 

質問: は私がのgSOAPでこのバグを検討し、パッチファイル、またはそれはむしろ間違ったSSLの使用の結果であるべきでしょうか? IPアドレスの代わりにIPをDNS名としてサブジェクト代替名に追加するだけでこれを修正する必要がありますか?

答えて

1

は、私はそれバグ検討するのgSOAPで、このバグを検討し、パッチ

を提出すべき。そして、MicrosoftがIEなどで持っているのと同じバグは、dNSNameエントリ内のIPアドレスをチェックし、IPAddressエントリ内の(他のすべてと同じように)IPアドレスをチェックしないという点です。

+0

感謝を!これは、IPAddressエントリを使用しないという一般的なゆるみであると思われますので、どちらのオプションも何とかvaildされるでしょう... – philipp

+0

@philipp:何らかの大企業がこのバグを長年にわたって持っているため、 RFC 5280では、DNS名にdNSNameを使用し、IPアドレスにiPAddressを使用することについてはっきりしています。 –

0

私はドメインやIPアドレスでは、ワイルドカード(*)をサポートするための追加的な改善と、次のパッチを検討する:説明のため

if (nval && 
    (!strcmp(nval->name, "DNS") || !strcmp(nval->name,"IP Address")) && 
    !soap_tag_cmp(nval->value, host)) 
{ ok = 1; 
    break; 
} 
関連する問題