• 締切済み

openssl関数

<?php $dn = array( 'countryName' => 'JP' ,'stateOrProvinceName' => 'Tokyo' ,'localityName' => 'Shibuyaku' ,'organizationName' => 'HOGE' ,'organizationalUnitName' => 'hogehoge' ,'commonName' => 'example.com' ,'emailAddress' => 'hoge@example.com' ); $pkeypass = '1234'; $numofdays = 365; $pkey = openssl_pkey_new(); $csr = openssl_csr_new($dn, $pkey); $sscert = openssl_csr_sign($csr, null, $pkey, $numofdays); $publickey = null; $privatekey = null; $csrStr = null; openssl_x509_export($sscert, $publickey); openssl_pkey_export($pkey,$privatekey,$pkeypass); openssl_csr_export($csr, $csrStr); echo $publickey; // 公開鍵 echo $privatekey; // 秘密鍵 echo $csrStr; // CSR 上記のプログラムで生成される公開鍵と秘密鍵は乱数的に生成されているのでしょうか? あと $pkeypass = '1234'; と echo $csrStr; の部分がどういった理由で記述されているのかイマイチわかりません。。 よろしくお願いいたします。

  • PHP
  • 回答数2
  • ありがとう数1

みんなの回答

回答No.2

>もう一つの質問である、「乱数的に発生させているのか?」 見落としていました。 公開鍵と秘密鍵は乱数で生成されます。 ソースコードを見たわけではありませんが、/dev/urandom など安全な乱数が使われるはずです。

回答No.1

$pkeypass = '1234'; 秘密鍵に掛けるパスワードです。秘密鍵で復号化や署名処理をする場合に、このパスワードが必要。 echo $csrStr; 上記プログラムでは自己署名していますが、後でVerisignなどにきちんと署名してもらいたいならば、ここで出力される「署名要求」が必要。

kou6666
質問者

お礼

わかりやすい回答をありがとうございます。 もう一つの質問である、「乱数的に発生させているのか?」 というのについてもわかりますか?

関連するQ&A

  • OpenSSL関数エラーについて

    ■ OpenSSLのd2i_RSAPublicKey関数の戻り値がNULLの件 <環境> WindowsXP OpenSSLバージョン1.0.0a VC2005 <現象> OpenSSLのライブラリ関数 d2i_RSAPublicKey関数を使用して、RSA構造体に公開鍵要素を取得 したいのですが、NULLが返ってきてしまいます。(入力は、公開鍵) ERR_error_string(ERR_get_error(), NULL); 関数でエラーを確認したところ、 『 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag 』 と表示されます。 以下に、手順を追って、実行したことを書きます。 何が悪いのか、ご指摘いただきたいです。 (PEM形式は使用しない前提です。) [鍵ペア生成(DER方式)] まず、DOS窓を立ち上げて、下記のようにDERフォーマットの RSA鍵ペアを作成しました。 openssl genrsa -out pri_test.der 2048 openssl rsa -in pri_test.pem -outform DER -out pri_test.der openssl rsa -inform DER -outform DER -in pri_test.der -pubout -out pub_test.der 秘密鍵:pri_test.der 公開鍵:pub_test.der [公開鍵の読み込み と d2i_RSAPublicKey関数のコール] 公開鍵:pub_test.der を、VCの入力ファイルに入力し、 d2i_RSAPublicKey関数をコールしました。 // file read /* 入力ファイルを開く */ FILE* file_p; RSA* rsa; unsigned char buff[1024]; unsigned char* pbuff; file_p = "pub_test.der", "rb"); if( NULL == pF_pubca ) { return -1; } // fileサイズを調べます(省略します) filesize = 0x126; // fileをバッファへ読み込みます memset( buff, 0, sizeof(buff) ); fread( buff, 1, filesize, file_p ); // buff には公開鍵pub_test.derの値 と サイズ分、 // 全て正常に格納されている事を確認済みです // ダブルポインタを作るために、ポインタバッファに渡します。 pBuff = pubca_buff; // d2i_RSAPublicKey関数をコールし、RSA構造体に公開鍵要素を取得します。 rsa = d2i_RSAPublicKey( NULL, &pBuff, filesize ); // ↑ここで、rsa構造体にはNULLが格納されています。 // エラーのログを出力します。 printf("%s\n", ERR_error_string(ERR_get_error(), NULL)); // ⇒ 『 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag 』 // と表示されてしまいます。 <備考> 同様の方法で、入力を秘密鍵に設定し、d2i_RSAPrivateKey関数であれば、 正常にRSA構造体に各要素が格納されます。 何か、公開鍵をRSA構造体に格納するために、別の方法があるのでしょうか。

  • OpenSSLについて

    現在、SSL導入に向けて勉強&準備をしています。 CentOS5.5でApache+OpenSSLを使ってSSLを導入しようと考えていまして 認証局はベリサインを利用しようと思っています。 以下のベリサインの導入手順を参考に作業をしています。 https://www.verisign.co.jp/ssl/help/csr/capache_new.html # rpm -qa | grep openssl でOpenSSLが入っていることを確認しましたので 上記手順書の最初の秘密鍵を作成しようとしたのですが /usr/local/ssl/bin というディレクトリがなく、whichコマンドでパスを調べ /usr/bin/にあることがわかり そのディレクトリに読みかえて作業を行い始めましたが、 これで問題ないのでしょうか? ちなみに、この件で色々ぐぐってみるとOpenSSLが既に入っていても ソースからOpenSSLをインストールするような解説を見かけましたので 新たにソースから入れたほうがよいのでしょうか?

  • OpenSSLのcsr生成について

    以下の環境で.scrを生成したいのですが、コマンドオプションが無効のようでうまくいきません。確かに該当するコマンドオプションは無いのですが、どのサイトを見てもcsr生成時にreqや?configが使われています。 また、これらのコマンドが使えなかった場合、どのようにオプションを指定してやればcsrが生成できますでしょうか?わかりにくい質問で恐縮ですが、ご存知の方がいらっしゃいましたらご教示のほどよろしくお願いいたします。 ■サーバー環境 OS:windows7(64bit) サーバ:httpd-2.2.16-win32-x86-openssl-0.9.8o.msi ■エラー内容 OpenSSL>req ?config ..\conf\openSSL.cnf -new -key server.key > server.csr unknown option ?config req [options] <infile >outfile whre options are オプション一覧省略... error in req

  • OpenSSL の 3DES についての理解を深めたいです

    OpenSSLでの3DESを勉強しているのですが、以下コマンドが理解できないのでご教授ください。 ※そもそも暗号化処理自体あまり理解しておりませんorz $ echo hoge | openssl enc -des3 -base64 -k 'yyyy' U2FsdGVkX19vTigKtKhZM9VVTAHQv0fP 3DESといえば鍵を3つ(もしくは2つ)使わなければいけないと考えているのですが、上記コマンドでは特に鍵を複数指定しているとは思えません。 (パスワードのyyyyのみ) なぜ鍵を複数指定せずともdes3で暗号化された文字が出力されるのでしょうか? また、鍵を複数(2つもしくは3つ)指定して暗号化するにはどのような方法があるのでしょうか? 上記どちらかでもよいので、ご存知の方のご回答を聞きたいです。 また参考になるURL等ご提示頂けるとありがたいです。

  • openssl_pkcs7_encryptについて

    もろもろ初心者です。 PHPを使ってセキュアなメールを送りたくて、openssl_pkcs7_encryptが使えるかなと思ってやってみたのですが、やり方がよく分かりません。 とりあえず、以下のように書いてみたら、失敗しました。 $key = file_get_contents("hoge.cer"); if(openssl_pkcs7_encrypt("hogehoge",realpath("enc.txt"),$key,array("To"=>"mailaddress","From"=>"HQ","Subject"=>"Eyes only"))){ echo"成功"; }else{ echo"失敗"; } hoge.cerは、Comodo FREE Personal Secure Email CertificateのやつをBase 64 encoded X.509でエクスポートしたものです。 mailaddressの部分は実際はComodoで登録したメールアドレスと記述していますが、教えてgooではメールアドレスを記述すると質問が中々反映されないので、便宜上mailaddressとしました。 何がダメか原因を教えてください!

    • ベストアンサー
    • PHP
  • CSR ファイルを作る際に必要な秘密鍵ファイル

    CSR ファイルを作る際に必要な「秘密鍵ファイル」って、「サーバの公開鍵」なのでしょうか? http://www.ibm.com/developerworks/jp/websphere/library/web/web_security/2.html こちらのサイトの説明だと、CSRに埋め込まれる鍵は、サーバの公開鍵です。 しかしながら、こちらの手順書 https://www.cybertrust.ne.jp/SureServer/apply/Apache_Linux.pdf において、CSR ファイルの作成に必要なのは「秘密鍵ファイル」と呼ばれるファイルです。 とても混乱しているのですが、本当はどうなっているのでしょうか。 自分としては、「秘密鍵ファイル」は、そう呼ばれているだけで、中身はサーバの公開鍵が含まれている。 というふうに思っています。 これは間違いでしょうか。

  • [CakePHP] Paginatorのリンクが変

    CakePHPのPaginatorを使ったページリンクが正しく出力されません。 1ページ目は正しく出力できていますが、2ページ目などに移動した際にURLがおかしくなります。 現状 1ページ目 http://www.example.com/hoge/2 ↓ 2ページ目 http://www.example.com/hoge/2/page:3 理想 1ページ目 http://www.example.com/hoge/2 ↓ 2ページ目 http://www.example.com/hoge/3 また、パラメータがついた場合も 1ページ目 http://www.example.com/hoge/2?hoge=hoge ↓ 2ページ目 http://www.example.com/hoge/3?hoge=hoge となるようにしたいのですが、何を間違えているのでしょうか。 ちなみにソースは以下のようになってます。 View/Hoge.php echo $this->Paginator->prev('< 前へ', array(), null, array('class' => 'prev disabled')); echo $this->Paginator->numbers(array('separator' => '')); echo $this->Paginator->next('次へ >', array(), null, array('class' => 'next disabled')); Config/routes.php Router::connect(     '/hoge/:page',     array(         'action' => 'hoge',     ),     array(         'pass' => array(             'page',         )     ) );

    • 締切済み
    • PHP
  • 公開鍵と秘密鍵

    サーバ側で ssh-keygen -t rsa と入力すると,公開鍵と秘密鍵が生成されますが どうしてクライアント側に秘密鍵をもたせるのでしょうか? 逆でも通信できる気がします. あと,サーバ1台に対して,クライアントが複数いる場合に 公開鍵と秘密鍵のペアはクライアントの人数分生成するのが適切なのでしょうか? (複数のサーバに1台のクライアントが接続する場合も,各サーバが1台のクライアントに対して公開鍵・秘密鍵を生成するのが適切なのでしょうか?) よろしくおねがいします.

  • 秘密鍵の比較について

    下記2つの秘密鍵を比較しようとしています。   1.CSR作成時に同時に作成される秘密鍵   2.認証局より受領した証明書と1.の秘密鍵より作成した.p12ファイルから、下記のコマンドで抽出した秘密鍵      openssl pkcs12 -in input.pfx -nocerts -out output_key.pem(証明書名はサンプルです。) 同じ秘密鍵なはずなのに、catで開いた証明書の中身が合致しません。 なぜ合致しないかわかる方ご教示いただけないでしょうか。

  • 自己署名証明書によるSSL通信について教えてください!

    SSL通信により、データを暗号化してWeb上でやりとりするシステムの構築を考えています。 そこで自己署名というのを考えているのですが、署名の流れがいまいち分かりません。 認証局利用の場合、私の理解では、 【サーバ側】 1.サーバ側でRSA秘密鍵を生成 2.RSA秘密鍵を元にCSRを作成 3.CSRファイルを認証局に送信 【認証局】 4.CA秘密鍵により暗号化し、サーバ証明書を作成 5.サーバ側にサーバ証明書を送信 【サーバ側】 6.クライアント側にサーバ証明書を送信 【クライアント側】 7.サーバ側よりサーバ証明書を受信する 8.認証局より公開鍵を取得する 9.認証局の公開鍵でサーバ証明書の暗号化された鍵(認証局の秘密鍵で暗号化されたもの)を復号する 10.復号した鍵により、サーバ証明書の暗号文を復号する となります。(間違いがある場合はご指摘下さい) では、自己署名を行う場合はどうなるのでしょうか? 単純にサーバ証明書を自分で作成すると考えてよろしいのでしょうか? CSRファイルの作成などもやはり行うのでしょうか? クライアント側の流れは変わらないのでしょうか? また、この操作は接続毎に毎回行うことになるのでしょうか? (秘密鍵、サーバ証明書は毎回変わるのでしょうか?) 初歩的な質問とは思いますが、よろしくお願いいたします。

専門家に質問してみよう