- PR -

C言語で、https接続

1
投稿者投稿内容
くろ
常連さん
会議室デビュー日: 2004/08/17
投稿数: 42
投稿日時: 2004-10-21 22:23
はじめまして。

現在、私はC言語で、https://〜/xxx.cgiにPOST接続を試みているのですが、
正常に動作をしません。

手順としましては、ソケットを作成し、OpenSSLのAPIを使用して、
送信をし、接続先からのレスポンスを受け取り、標準出力をしております。

どこが、上手くいかないといいますと、接続先のサーバから、
HTTPステータス「400 Bad Request」が戻されて、xxx.cgiまで
届いていないようなのですが、具体的にどこを直したらいいのか分からず困っております。

リクエストヘッダーとしましては、
+-------------------------------------------------------------------+
POST プログラム名 HTTP/1.0
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT 5.0)
Content-Length: 270
Content-type: text/xml; charset=utf-8

data=xxxxxxxx
+-------------------------------------------------------------------+

を作成しまして、POST〜utf-8までの改行コードは\r\nで行っております。

どなたかご存知の方がいらっしゃいましたら、
教えて頂けませんでしょうか?

宜しくお願いします。
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2004-10-21 23:42
接続先は、80番ポートではなく、443(?)番に繋ぎに行くべきでしょう。
>POST プログラム名 HTTP/1.0
この部分は
POST xxx.cgi HTTP/1.0

とするべきでしょう。
しかし、核心はこんなレベルではなく、MD5 とか RSA, SHAとかの暗号化方式を
相手がサポートしてるものの内何れか決めて、実際にパケットのデータを
その暗号化方式に則って暗号化して送信してやらねばならないというところです。

この場合、モノによっては公開鍵やら秘密鍵やらの存在と生成も考慮に入れ
なければならないでしょう。ひょっとしたら VeriSign という会社の世話に
ならなければならない事になるかも知れません。

そして、これを C でやるとなると、恐らく・・・
TCP/IP データグラム一個一個を弄くる羽目になるでしょう。
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2004-10-22 12:27
OpenSSL のライブラリを使ったクライアントを書くこと自体は
通常のソケットプログラミングとほぼ同様なので難しいことでは
ありませんが

自分では cgi をいじったりしないので、「こーゆーケースがありがち」
とかいうことは分かりませんが...
https で、その cgi だけで生じる問題なんでしょうか?
(てきとーな静的コンテンツを GET するのはできているのか、とか)

リファレンスになるクライアントが存在する場合には...
サーバ側を書いて、クライアントが投げてきている内容を読んでみる、とか。
くろ
常連さん
会議室デビュー日: 2004/08/17
投稿数: 42
投稿日時: 2004-10-22 13:49
コブラさん、ぽんすさん、
ご返答ありがとうございます。

> リファレンスになるクライアントが存在する場合には...
> サーバ側を書いて、クライアントが投げてきている内容を読んでみる、とか。

Apacheのアクセスログをみるかぎり、CGIには届いてないようなので

もう少し頑張ってみます。
もし、他にも助言がありましたら、宜しくお願い致します。
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2004-10-23 06:18
引用:

くろさんの書き込み (2004-10-22 13:49) より:
Apacheのアクセスログをみるかぎり、CGIには届いてないようなので


えーと、何を言っていたかというと...
そこいらの適当なウェブブラウザでアクセスしてみる、ということは
できないのでしょうか? それでダメなら、クライアントの書き方の
問題じゃなくておそらくウェブサーバの設定の問題ですよね。

ブラウザで接続できる場合は...
httpsじゃなくてhttp接続だったら、パケットをキャプチャして
眺めてみればどういう内容を書いて投げつければいいのか
分かりますよね。

httpsの場合は...
ダミーのcgiを用意して、ブラウザが投げてきている内容を
チェックしてみる、とか。もっとうまい手がありそうな気が
しますが。

ありそうな問題として、ぱっと思いつく範囲だと、
> Content-Length: 270
この数字は合っていますか?なんてところでしょうか。
クライアント側からの送信がちゃんと完了しているかどうか。
サーバがボーッと待ち続けていないかどうか。
1

スキルアップ/キャリアアップ(JOB@IT)