インターネットセキュリティの------openssl


インターネットの通信の中で、例えばQQ、MSNなど、もし私达が话す内容が暗号化されていないならば、このように他の人はすべてアクセスすることができて、これは适切ではありませんて、すべて私达は私达の通信の内容に対して暗号化を行って、それから更に通信を行うのは比较的に安全です
     インターネット上のデータ転送には、明文転送と暗号化転送の2種類があります.明文伝送のプロトコルはftp、http、smtp、telnetである.しかし、データの完全性と安全性のため、暗号化などの関連手段を引用してデータの安全と完全性を保証した.
暗号化タイプ
暗号化タイプ
げんり
よく使われるアルゴリズム
メリット
欠点
たいしょう暗号化
双方は同じ暗号化アルゴリズムを用いてデータを暗号化復号する
DES, 3DES, AES
暗号化速度が速く、大量のデータを暗号化するのに適しており、データの機密性を保証することができる.
   双方は同じ暗号アルゴリズムを採用しているので、データの完全性を保証することはできません.暗号化するデータが多いと、鍵の管理が有効ではありません.
ひたいしょう暗号化
認証認証:秘密鍵暗号化、公開鍵復号データ送信:公開鍵暗号化、秘密鍵復号
RSADSS
データの可用性と機密性を保証
暗号化速度が遅く、使用する鍵がかなり長い
単一暗号化
暗号化アルゴリズムを直接利用してデータを暗号化して、暗号化して解読することしかできません
md5,sha1,sha256,sha512
データの整合性を確保
復号不可
   では、完全なデータ送信はどのようなプロセスですか?
1、送信者は選択した一方向暗号化アルゴリズムを用いて元のデータの特徴コードを計算する.
2、送信者は自分の秘密鍵を使って特徴コードを暗号化し、元のデータの後ろに添付する.
3、送信者は使い捨て対称鍵を生成し、この鍵を用いてデータ(元のデータ+暗号化された特徴コード)を暗号化する.
4、送信者は受信者の公開鍵を用いて使い捨て対称鍵を暗号化し、暗号化データの後ろに付加する
5、発送;
1、受信者は自分の秘密鍵を使って暗号化された使い捨て対称鍵を復号する.
2、対称鍵を用いてデータを復号し、暗号化された特徴コードと元のデータを得る.
3、送信者の公開鍵を用いて暗号化された特徴コードを復号する.
4、送信側と同じ一方向暗号アルゴリズムを用いてデータの特徴コードを再計算し、復号した特徴と比較する
非対称暗号化では、相手の公開鍵を取得することが重要です.最も簡単なのは、自分でサイトを構築することです.
自分の公開鍵は公表されているが、他の人が手に入れたとき、この公開鍵が公表者であることをどうして確保できるのだろうか.
    だから簡単な公開鍵の配布メカニズムはすでに公開鍵の出所の合法性を保証することができなくて、そこで分布式の配布メカニズムがあって、最もよくあるのはデジタル証明書です
デジタル証明書
    なぜデジタル証明書を使うのですか?私たちが通信をするとき、相手が私たちが交流したい人であることをどのように保証するか想像してみてください.デジタル署名をしますか?では、このデジタル署名が合法であることをどのように保証しますか?この場合、第三者機関が、みんなが認めているデジタル証明書を配布する必要があります.例えば、×××,私たちが相手のデジタル証明書を見たとき、相手の身分が確定したのではないでしょうか.
デジタル証明書のフォーマット: 
  デジタル証明書:x.509 v 3(一般的)
      バージョン番号(version)
      シリアル番号():証明書自体がCAで唯一識別されている.
      署名アルゴリズムフラグ             // 証明書の正当性を検証するために使用されるデータ暗号化アルゴリズムをユーザーに決定させる
      発行者名
      有効期間:
      証明書マスター名:(組織(ホスト)、個人)
      証明書マスターの公開鍵情報:
      発行元の唯一のマーク
      証明書本体の唯一のフラグ
拡張:
      署名:
PKI(Public Key Infrastructure)CAが持つ機構を定義する仕様です
コンポーネント:
         エンドエンティティ(応募者)
         登録機関(RC)
        ビザ機構(CA)-->ビザ機構(CA)
       証明書取り消しリスト(CRL)発行機関
      証明書アクセスライブラリ
         どうやって証明書申請を作成しますか?社内の従業員に証明書を配布するだけであれば、第三者機関に行って証明書を申請するには一定の費用がかかります.このとき、私たちは自分でCAを設立し、自分に証明書を発行します.そうすればいいです.
CAを自作するには、OpenSSLというツールを借りて、
Opensslは3つの部分からなり、
  libcrypto:暗号解読を実現するツールで、暗号化が必要なプログラムの多くがこのライブラリを呼び出します.
  libssl:ssl機能を実現する
  Openssl:opensslのコマンドラインツール
Openssl:よく使われるいくつかのコマンドの紹介
versinon opensslのバージョン番号の表示
Enc暗号化
          -des 3暗号化アルゴリズムをdesとして指定
           -in    暗号化/復号化ファイルの指定
           -e     暗号化
           -d      復号化
          -out暗号化または復号化されたファイルを格納する場所を設定する
例:
                ファイルを暗号化するプロセスを使用します.
                 openssl enc -des3 -in/path/to/somefile -e -out/path/to/somefile.des3
                 暗号化されたファイルを復号するには、次の手順に従います.
                openssl enc -des3 -in/path/to/somefile.des3 -d -out/path/to/somefile
 dgst
              -Hexは、算出された特徴コードの表示を16で禁止する
               -out保存ファイル 
      例:md 5のアルゴリズムでファイルの特徴コードを取得する
               openssl dgst -md5 -hex/path/to/somefile
speed  速度テストツール
                パラメータなしで各暗号アルゴリズムを一度テストし、暗号アルゴリズムを指定すると、指定したアルゴリズムのみテストします   
秘密鍵の生成:
    openssl  genrsa num  
    num  生成鍵のビット数を指定します.デフォルトは512ビットで、2のn次方位でなければなりません.
 例:
    openssl genrsa 2^n >/path/to/keyfile
    openssl genrsa -out/path/to/keyfile 2^n
秘密鍵についても暗号化できます
  -des 3はdes 3の形式で暗号化することを指定する
  -out保存場所の指定
例:openssl genrsa-des 3 2048
       注:私たちの秘密鍵は暗号化されていますが、勝手に見ることはできません.だから、私たちは秘密鍵ファイルの権限を自分だけが見ることができるように変更しなければなりません.
公開鍵の生成
注意:公開鍵は秘密鍵から抽出されます.
rsa
       -in  秘密鍵が格納されている場所
       -pubout抽出公開鍵
例:
openssl rsa -in/path/to/keyfile -pubout  叢秘密鍵から公開鍵を抽出
どうやって証明書を申請しますか?
使用するコマンドreq
          -in   どのファイルから読み込むかを指定します
         -key  秘密鍵ファイルの場所を指定
         -new  作成証明書申請の実現
         -days証明書の使用時間を指定します
         -out  証明書申請をその書類の下に保存する
たとえば、証明書申請を作成する方法は、次のとおりです.
      openssl req -new -key/path/to/private_key -out/paht/to/certificate.csr
以下では、CAの自己構築、証明書申請の作成、証明書の配布を実現します.
自作CA:
#cd/etc/pki/CA/1、CAに秘密鍵を生成する:
[root@www CA]# (umask 077; openssl genrsa -out private/cakey.pem 2048)
Generating RSA private key, 2048 bit long modulus
...........................+++
.......+++
e is 65537 (0x10001)

2、自己署名証明書を生成する:
[root@www CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN       //      
State or Province Name (full name) []:Henan  //    
Locality Name (eg, city) [Default City]:Zhengzhou   //    
Organization Name (eg, company) [Default Company Ltd]:magedu  //      
Organizational Unit Name (eg, section) []:Tech      //       
Common Name (eg, your name or your server's hostname) []:www.magelinux.org            //     
Email Address []:           //  
[root@www CA]#
[root@www CA]# touch index.txt serial   //       
[root@www CA]# ls
cacert.pem  certs  crl  index.txt  newcerts  private  serial
[root@www CA]# echo 01 > serial

注:ここでサインするときは-x 509を付けなければなりません.指定しないと証明書申請になります
   そうなると自分たちのCAが作成されているので、サインすればいいので、証明書を持って仕事ができるようになります
3、署名証明書:#openssl ca-in/path/to/certreq.csr-out/path/to/certfile.crt(証明書ファイルはcrtで終わる)-days 365はデジタル署名のプロセスである
クライアント
    秘密鍵の生成
[root@www ~]# mkdir /key
[root@www ~]# (umask 077; openssl genrsa -out /key/httpd.key 2048)
Generating RSA private key, 2048 bit long modulus
...............................................................................+++
.........................................................+++
e is 65537 (0x10001)
[root@www ~]#

 証明書作成要求:
[root@www ~]# openssl req -new -key /key/httpd.key -out /key/httpd.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Henan
Locality Name (eg, city) [Default City]:Zhengzhou
Organization Name (eg, company) [Default Company Ltd]:magedu
Organizational Unit Name (eg, section) []:Tech
Common Name (eg, your name or your server's hostname) []:www.magelinux.org
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@www ~]#

署名証明書:
[root@www ~]# openssl ca -in /key/httpd.csr -out /key/httpd1.csr -days 365
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Aug 27 06:15:30 2013 GMT
            Not After : Aug 27 06:15:30 2014 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = Henan
            organizationName          = magedu
            organizationalUnitName    = Tech
            commonName                = www.magelinux.org
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                A7:B0:1A:A0:BB:FB:AE:36:18:D0:72:1B:C5:A7:7C:8E:D5:F5:01:1F
            X509v3 Authority Key Identifier:
                keyid:7E:76:06:55:50:E5:CB:EE:F0:A7:F0:2E:DB:4D:CD:2B:54:C6:AF:39
Certificate is to be certified until Aug 27 06:15:30 2014 GMT (365 days)
Sign the certificate? [y/n]:

専用クライアントテストツール:
# openssl s_client -connect HOST:PORT -CAfile/path/to/cacertfile|-CApath/paht/to/cacertfiles_dir/-ssl2|-ssl3|-tls1
   -接続説明そのサーバのポートをリンクして検出する
   -CAfileはそのCA証明書を使用して検出することを指定します
   -CApathはそのパスの下のCA証明書を指定し、-CAfileと2つ選択して使用します.
   -ssl 2指定プロトコル
   -stateステータスを表示
Opensslには、次の接尾辞名のファイルがあります.
.keyフォーマット:プライベート鍵.crtフォーマット:証明書ファイル、certificateの略称.csrフォーマット:証明書署名要求(証明書要求ファイル)、公開鍵情報、certificate signing requestの略称.crlフォーマット:証明書取り消しリスト、Certificate Revocation Listの略称.pemフォーマット:エクスポート、証明書インポート時の証明書のフォーマット、証明書の先頭があります.末尾の書式