• 締切済み

SSLライブラリを用いたプログラミングについて

サーバクライアント構成で、通信にOpenSSLを 用いることを考えています。 SSL_CTX SSL_load_error_strings() SSLeay_add_ssl_algorithms() など、用意されている構造体や関数のマニュアルが 欲しいのですが、検索してみてもあまり出てきません。 できれば日本語での詳しい説明が欲しいのですが、 どこかよいページをご存知の方いらっしゃいますでしょうか。

みんなの回答

  • g_dori
  • ベストアンサー率47% (330/699)
回答No.1

Windows限定でしたら、InternetOpenでSSL通信を勝手にやってくれますが、それじゃダメですか? ソケットを使ったSSL通信はプロキシ超えとか非常に面倒ですよ。 日本語文献で詳しいモノは私も知りません。

ponshige
質問者

補足

ありがとうございます。 クライアントはWindowsなんですが、 サーバはUNIXを使います。 また、ソケット通信は必須条件なのです。 非常に面倒ですか…頑張るしかないですけど。。 やはり英語の資料漁るしかないんでしょうか。。

関連するQ&A

  • VBで使用できるDLL(SSL通信)をVC++で作成する。

    VBで使用できるDLLをVC++で作成しました。 内容は、SSL転送をWindowsで行うためのDLLです。 DLLではなくexeで作成したときはDOS窓からうまく動いたのですが、 DLLで作成をして、VBから呼んだときにエラーメッセージがでてプログラムは実行されません。 エラーメッセージは、 実行時エラー'53': ファイルが見つかりません:dll-file-name です。 エラーにはいろいろな要素があると思うのですが、 このエラーが出るか出ないかは、関数の中のSSL通信のプログラムを書くと このエラーがでます。 例>SSLeay_add_ssl_algorithms(); SSL通信の記述がなければ正常に実行されるので、この部分だけだと思うの ですが、特別な設定、記述があれば教えてください。 よろしくお願いします。

  • SSLのを使った通信の際に起こるエラーについて

    unixにOpenSSL0.9.6aをインストールして、その中のデモプログラムを 実行したのですが、どうしてもSSL_connect()がうまくいきません。 サーバ側、クライアント側には、以下のようなメッセージが出ます。 クライアント側 3232:error:24064064:random number generator:SSLEAY_RAND_BYTES:PRNG not seeded:md_rand.c:474:You need to read the OpenSSL FAQ, http://www.openssl.org/support/faq .html Program exited with code 02. サーバ側 3233:error:140EC0E5:SSL routines:SSL2_READ_INTERNAL:ssl handshake failure:s2_pkt .c:142: クライアント側に出ているURLにアクセスし、呼んでみたのですが・・・いまいちよくわかりません。そのURLの日本語訳の載っているHPもあったので、そちらも参照したのですが、やはりよくわかりませんでした。 どのように対処したらよいのか、どなたかわかりましたら教えていただけるとうれしいです。 よろしくお願いします。

  • SSLのサイト間について

    自社ショッピングサイトでSSL通信をしています そのサイトからPaypalの決済画面に遷移する際に Paypalのマニュアルでは暗号化ウェブ決済として OpenSSLを使用した暗号化の記載があります また「なりすまし」防止として Paypalの設定画面で「暗号化されていないウェブサイト決済を拒否」を ONとあります しかし、Paypalサイトに遷移する際、遷移元はhttps://のサイトなので Paypal側の暗号化は必要ないのではないかと思います Paypal側の暗号化をすればいいだけなのですが、私の技術では なかなか難しいので・・・ どなたかご教授お願い致します

  • SSLアクセラレータ使用時の動作

    ネットワークセキュリティについて勉強しています。 ロードバランサーでSSLアクセラレータを使用して、SSL通信をする場合の 動作に関して教えていただきたく、よろいくお願いします。 (インターネット)----[ロードバランサ]-----------[WEBサーバ]          【https⇒http】 上記の様に、SSLアクセラレータ機能を持つロードバランサと WEBサーバで構成されている場合、ロードバランサ上で httpsからhttpに変換されるという理解なのですが、 この場合、インターネットから来る全てのhttpsでの接続はロードバランサ上で 復号処理がされるのでしょうか?(質問(1)) また、この場合、WEBサーバ上でSSLのサービス(OpenSSL等)が 起動されていても、復号処理はロードバランサで行われるため、 WEBサーバ上のSSLのサービスは使用されないのでしょうか?(質問(2)) ロードバランサで復号されるということは、ロードバランサと WEBサーバの間の通信はhttp(port:80)で行われるのでしょうか?(質問(3)) 理解不足な点が多く、分かりにくい質問かもしれませんが、 詳しい方ご教授頂けるとありがたいです。 よろしくお願いします。

  • SSL_connect(ssl)

    お世話になっています。 VC++2005、MFC、Win7、openssl で作業しています。 Gメールから、POP3S 接続でメールを受け取りたいと考えています。 メールヘッダーの受信後に、本文を取り出す前に接続が切れます。 最初に、接続の部分ですが、問題点がありましたら、アドバイスをください。 void CSQMailBoxTreeView::GmailMailDL(){ int nReturnCode; WSADATA wsaData; CFileException fileExpection; #define MAJOR_VERSION_REQUIRED 1 #define MINOR_VERSION_REQUIRED 1 struct sockaddr_in server; std::string req; // リクエスト std::string res; // レスポンス std::string host_url = "pop.googlemail.com"; strcpy_s(gszGmailServerName,(LPCTSTR)oc_Gmailpop3servername); if(strlen(gszGmailServerName)==0){ MessageBox("設定 - Gmail POP3サーバー から、\n受信メール(POP3)サーバを\n入力して下さい。","POP Server", MB_OK); } strcpy_s(gszGmailUserId, (LPCTSTR)oc_Gmailpop3userid); if(strlen(gszGmailUserId)==0){ MessageBox("設定 - Gmail POP3サーバー から、\nメールサーバのユーザ名を\n入力してください。","POP User ID", MB_OK); } strcpy_s(gszGmailPassword, (LPCTSTR)oc_Gmailpop3password); if(strlen(gszGmailPassword)==0){ MessageBox("設定 - Gmail POP3サーバー から、\nパスワードを入力してください。","警告 PassWord", MB_OK); } strcpy_s(gszGmailPOP3Port, (LPCTSTR)oc_Gmailpop3port); if(strlen(gszGmailPassword)==0){ MessageBox("設定 - Gmail POP3サーバー から、\nポート番号を入力してください。","POP3 PortNumber", MB_OK); } // Prepare version for WSAStartup() WORD wVersionRequired = MAKEWORD(MAJOR_VERSION_REQUIRED, MINOR_VERSION_REQUIRED); // Initialize the WinSock DLL nReturnCode = WSAStartup(wVersionRequired, &wsaData); if (nReturnCode != 0 ){ MessageBox("Error on WSAStartup()", "CheckGMail", MB_OK); return ; } // Confirm that the version requested is available. if (wsaData.wVersion != wVersionRequired){ // Version needed is not available. MessageBox("Wrong WinSock Version", "CheckGMail", MB_OK); WSACleanup(); return ; } sock = socket(AF_INET, SOCK_STREAM, 0); server.sin_family = AF_INET; server.sin_port = htons(995); server.sin_addr.S_un.S_addr = inet_addr(host_url.c_str()); if (server.sin_addr.S_un.S_addr == 0xffffffff) { struct hostent *host; unsigned int **addrptr; host = gethostbyname(host_url.c_str()); if (host == NULL) { return ; } addrptr = (unsigned int **)host->h_addr_list; while (*addrptr != NULL) { server.sin_addr.S_un.S_addr = *(*addrptr); if (connect(sock, (struct sockaddr *)&server, sizeof(server)) == 0) { break; } } if (*addrptr == NULL) { sprintf_s(outbuf3, "Fatal error: unable to connect to the server.\n"); MessageBox(outbuf3,"Error", MB_OK); WSACleanup(); return;// -1; } } else { if (connect(sock, (struct sockaddr *)&server, sizeof(server)) != 0){ return ; } } SSL_load_error_strings(); SSL_library_init(); ctx = SSL_CTX_new(TLSv1_method()); if (ctx == NULL) { return;// 1; } ssl = SSL_new(ctx); if (ssl == NULL) { return;// 1; } if (SSL_set_fd(ssl, sock) == 0) { return;// 1; } RAND_poll(); while (RAND_status() == 0) { unsigned short rand_ret = rand() % 65536; RAND_seed(&rand_ret, sizeof(rand_ret)); } int ev = SSL_connect(ssl); if ( ev != 1) { int ret = SSL_get_error(ssl, ev); if(ret <= 0){ ERR_print_errors_fp(stderr); return;// 1; } } if (WSAAsyncSelect(sock, *this, SM_GASYNC3, FD_CONNECT|FD_READ|FD_WRITE|FD_CLOSE) == SOCKET_ERROR){ MessageBox("WSAAsyncSelect() failed","Error", MB_OK); closesocket(sock); sock = INVALID_SOCKET; return; } gnAppState = STATE_CONNECTING; }

  • fsockopenを使った証明書付きのSSL通信

    お世話になっております。 fsockopenを使って、証明書付きのSSL通信をして表示内容を取得したいのです。 いろいろ見て回って、下記のようなソースを作りました。 ------------------------------------------------------------------------ $context = stream_context_create(); stream_context_set_option($context, 'ssl', 'local_cert', './client.pem'); stream_context_set_option($context, 'ssl', 'cafile', './ca.pem'); $host = "aaa.bbb.ne.jp"; $fp = fsockopen("ssl://{$host}", 443, $errno, $errstr, 10, $context); ------------------------------------------------------------------------ すると、 Warning: fsockopen() expects at most 5 parameters, 6 given と怒られます。fsockopenに6つ目のパラメータは渡せないってことですよね? 仕方がないので、 $contextをはずしてみると、当然証明ができないので怒られます。 Warning: fsockopen(): SSL operation failed with code 1. OpenSSL Error messages: error:14094410:SSL routines:func(148):reason(1040) in xxxxxxx~ Warning: fsockopen(): Failed to enable crypto in xxxxxxx~ Warning: fsockopen(): unable to connect to ssl://aaa.bbb.ne.jp:443 (Unknown error) in xxxxxxx~ まる一日解決方法を探し続けているのですが、だめです。 漠然とした内容で申し訳ありませんが、どなたかご教授願えませんでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • Apacheのssl設定について

    以前、mod_sslの導入について質問させていただき、無事導入完了したのですが、 ssl通信がうまくいきません。 ご質問内容 (1)バックエンドのwebサーバとhttps通信する設定方法をを教えてください。  httpd.confもしくはssl.confどちらに設定するかも含めてご教示ください。 (2)必要な設定ファイル(証明書関連)があればそちらもご教示ください。 図の様なシステム構成でWebサーバAのApache設定です。 httpd.confの設定です。 <VirtualHost *:80> ServerName hogehoge.example.com RewriteEngine On SSLProxyEngine on RewriteRule ^/httpstest/(.*) https://192.168.1.1/$1 [P] SSLEngine on SSLCertificateFile /tmp/cert/server.pem SSLCertificateKeyFile /tmp/cert/serverkey.pem </VirtualHost> SSLCertificateFile:プライベート認証局で作成したWebサーバBのサーバ証明書 SSLCertificateKeyFile:WebサーバBで作成した秘密鍵 SSL設定をしない場合はクライアントにWebサーバBのhtml画面が表示されます。 SSL設定をすると Apacheのaccess_logに 192.168.1.1 - - [09/Dec/2010:16:24:20 +0900] "GET /" 400 557 "-" "-"と出力され、ブランク画面が表示されます。 error.logに出力はありません。 ssl_error_logに [Thu Dec 09 16:39:33 2010] [warn] RSA server certificate CommonName (CN) `xxxxxxx.local.domain' does NOT match server name!? と出力されますが、Ariasの問題らしいのでSSL設定とは直接関係無いようです。 よろしくお願いいたします

  • 双方向SSL時にクライアント証明書が表示されない

    現在、顧客DMZ内にあるサーバに対し、インターネット上の 特定のクライアント様からサービスを利用できるように、 双方向SSLの環境を構築しておりますが、困った事があります。 詳細は次のようになります。長文となっておりますが、何卒ご教授 よろしくお願いいたします。 【1.現象】 ブラウザからSSLを行うサーバにアクセスすると、ポップアップボックスが表示され、 クライアントのブラウザの証明書ストアにあるクライアント証明書のうちどれを 使用するかが尋ねられますが、ボックスに何も表示されません。 【2.システム構成】 (1)アプリケーションサーバ  OS:Windows 2003 Server  WWWサーバ:IIS 6.0  サーバ証明書:セキュア・サーバID(ベリサイン社)  IIS設定:      ・サーバ証明書インストール      ・「セキュリティで保護されたチャネル (SSL) を要求する」にチェック      ・「クライアント証明書を要求する」を選択  ブラウザ:IE 6.0 (2)CA機関(個人持ち)  Win2003の証明書サービスを使用し、クライアント証明書を発行します。  ここで発行した証明書を(3)のクライアントに配布します。 (3)クライアント  OS:Windows XP SP2  ブラウザ:IE 6.0  (2)において、証明書サービスから発行したクライアント証明書を  クライアント機にコピーし、ダブルクリックし証明書をインストールしました。 ◆補足 ・上記(1)、(3)間でSSL通信を行います。 ・上記(1)、(2)、(3)は各々別マシンです。 ・上記(1)は社内ネットワーク上にあり、(3)はインターネット上から(1)にアクセスします。  (2)はネットワークに繋がっておらず独立しています。 ・上記(3)から(2)のアクセスにおいてクライアント証明書が表示されません。  また、試しに(1)において、(3)と同様の手順でクライアント証明書をインストールし、  (1)のブラウザを使用し(1)にアクセス(自マシンに対しhttpsアクセス)しましたが、  クライアント証明書が表示されませんでした。 【3.ご教授頂きたい事】 クライアントマシンのクライアント証明書が 表示されない原因、対処について教えてください。

  • ■HTTPS通信の時の証明書について。■

    <構成図> 端末PC----WAN----Server(SSL,CA,WEB) <条件> 自己認証局(CA)により、https通信を検討しています。 認証方法としては、 1.サーバ証明書を利用する(URLのSection1)方法と 2.クライアント証明書を利用する(URLのSection2)があります。 <参考URL> http://park15.wakwak.com/~unixlife/practical/openssl.html ■質問1 端末PCから、Serverに通信するとき、 1.サーバ証明書の方法ですと、端末PCにサーバ証明書を入れなくても、 警告がでるが、通信はできそうですが、 2.クライアント証明書の方法も、端末PCにクライアント証明書をいれなくても、 警告がでるが、通信はできますか? ■質問2 上記の例だと、自己認証局(CA)による<条件>ですが、 外部CA認証局を利用する場合も、 1.サーバ証明書、2.クライアント証明書の方法ともに、 警告がでるが、通信はできるのでしょうか? 宜しくお願いします。

  • Linux+Apache2+openSSLでVirtualHostは不可能?

    こんにちは。 RedHat Linux9 で、Apache2.0 + openSSLをインストールしたWebサーバーをたてています。 このサーバーでは「domain-A.com(仮)」 を動かしたいのですが、将来的に他のドメインも入れたいため、名前ベースのVirtualHostで構成したいと考えています。ところが、Apacheのマニュアルには「名前ベースのバーチャルホストは SSL プロトコルの特徴により、 SSL セキュアサーバには使えません。」と書かれています。 とりあえず、httpd.confにて、Domain-X.com(非SSL)とDomain-A.com(SSL)をバーチャルホストとして設定しました。 ssl.confにはDocumentRootとしてDomain-A.comのルートを指定しました。 すると、Domain-A.comをSSLで確認できたのですが、Domain-X.comにhttpsでアクセスするとDomain-Aのファイルが表示されてしまったのです。 ひとつのサーバーでSSLを使用するドメインを複数動かすことはできないのでしょうか? また、それができないなら、SSLを使用しないドメインにhttpsでアクセスした時に、SSLを使用するドメインのファイルが出ないようにする方法はないのでしょうか?

専門家に質問してみよう