banner.gif adie's blog
主页 博客 胭脂泪,相留醉,几时重,自是人生长恨水长东
统计
日志总数: 127
评论总数: 123
日志分类
日志归档
最近日志
最近评论
订阅
rss2.gif

atom.gif

google_rss
yc.gif 【技术资料】 阅读 6381 次

Apache SSL 学习笔记(一)

2011-03-23 14:44:54

 

1. 不对称加密

   公钥: 用于加密

   私钥: 用于解密

           --------  验证接收者

2. 数字签名

   私钥: 用于加密

   公钥: 用于解密

          --------  验证发送者

3. 证书

   用于确认公钥所对应的私钥持有者的身份

   证书与公共密钥相关联

   证书内容包括:  证书的名称(含国家,省,城市,组织等信息), 公匙; 认证机构的名称, 签名; 有效时间; 证书签发的流水号等信息. 

   自签名证书(顶级证书): 证书的名称和认证机构的名称相同.

 

   RSA私钥(RSA Private Key)文件是一个数字文件,它用于解密你所接收到的信息。此私钥有一个对应的、被封装在你发布出去的证书文件中的公钥,而给你发送信息的人正是用这个公钥对发送的信息进行加密的。

   一个证书签发请求(CSR,Certificate Signing Request)文件是一个数字文件,它包含了你的公钥和你的名字。你把这个CSR发送给认证中心(CA)后,CA将会对其进行签名(译者注:使用CA自己的私钥对你的公钥和名字进行加密),并将其转化为一个真正的证书。

   证书(Certificate)包含了你的RSA公钥、你的名字、CA的名字,并且经过了CA的数字签名。能够识别这个CA的浏览器可以校验这个证书上的签名,从而就可以获取你的RSA公钥。这样浏览器就可以发送只有你能够解密的信息。

 

4. SSL

   客户端和服务器的握手过程如下所示:

    1. 协商用于数据传输的密码组和校验方法

    2. 建立并共享客户端和服务器的会话密钥

    3. 可选的客户端对服务器的认证

    4. 可选的服务器对客户端的认证

  其中可以使用的加密方法包括:

  • No encryption (不加密)
  • Stream Ciphers ()
    • RC4 with 40-bit keys
    • RC4 with 128-bit keys
  • CBC Block Ciphers (加密当前块时会用到之前的数据)
    • RC2 with 40 bit key
    • DES with 40 bit key
    • DES with 56 bit key
    • Triple-DES with 168 bit key
    • Idea (128 bit key) (目前最好的加密算法)
    • Fortezza (96 bit key)
   可以使用的校验方法包括:
  • No digest (Null choice)
  • MD5, a 128-bit hash
  • Secure Hash Algorithm (SHA-1), a 160-bit hash
5. OpenSSL
   常用命令:
  1. 合并证书和私钥   openssl pkcs12 -export -in cer.cer -out all.p12 -inkey key.key
  2. 验证证书颁发者   openssl verify -CAfile ca.cer cer.cer
  3. 转换pem成der(二进制流)       openssl x509 -inform der -in cer.der -outform pem -out out.pem
  4. 转换der成pem(Base64编码)   openssl x509 -inform pem -in cer.pem -outform der -out out.der
  5. 查看版本信息     openssl version -a
  6. 进行 base64 编码:  openssl base64 -in input.bin -out output.txt
  7. 解码 base64:         openssl base64 -d -in input.txt -out output.bin
  8. 用 base64 编码字符串:  echo "hello world" | openssl base64
  9. 解码 base64 字符串:     echo "IlRoZSBMaW51eCBKb3VybmFsIiANCg==" |  openssl base64 -d  (Windows 不可用)
  10. 计算文件的 MD5 值:     openssl md5 input.txt
  11. 计算文件的 SHA1 值:    openssl sha1 input.txt
6. OpenSSL 证书相关命令
  1. 生成 RSA 密钥(.key):  openssl genrsa [密钥长度]
    使用 -out filename 选项将结果保存到文件, 文件格式为 PEM 格式
    使用 -des/-des3/-idea/-aes128/-aes192/-aes256 可使用对应的方式对密钥进行加密, 生成的过程中会提示输入密码. 如果在 Apache 中使用了加密的密匙, 则每次启动服务器时都需要提供密码才行.
    使用 openssl rsa -noout -text -in filename 可以查看密钥的信息,包括模数,指数,质数等.
    对于已经加密的密钥文件, 可以用 openssl rsa -in file.key -out file.nopasswd.key 输出为不加密的文件. 当然,运行过程中会提示输入密码.

  2. 生成证书请求文件(.csr):   openssl req -new -key file.key -out file.csr
    生成请求文件时会要求输入相关的信息, 使用 "." 可留空, CN(Common Name)需要与网站域名匹配, 否则可能会被某些浏览器拒绝. 可以使用通配模式,形如:*.snakeoil.com
    可以使用 openssl req -noout -text -in file.csr 查看生成的请求的相关信息.

  3. 对 CSR 文件进行签名生成证书
    1. 自签名(使用生成 csr 文件的 key 来对 csr 文件签名):  openssl x509 -req -in file.csr -out file.cer -signkey file.key -days 3650
    2. 使用 CA 证书签名, 需要用到另一个证书和密钥文件(file1.cer, file1.key), 在 CA 机构内部完成:  openssl x509 -req -in file2.csr -out file2.cer -signkey file2.key -CA file1.cer -CAkey file1.key -CAcreateserial -days 3650
    查看证书的相关信息可以用:   openssl x509 -noout -text -in file.cer

  4. 生成PKCS#12证书(.p12): openssl pkcs12 -export -clcerts -in file.cer -inkey file.key -out f.p12
    将一对PEM格式的证书和其密钥文件,转换成PKCS#12格式的证书文件,PKCS#12称为Personal Information Exchange格式,通常以.p12为扩展名. PKCS#12证书中含有公钥、私钥、证书的属性字段三部分内容,在转换时需要设置导出密码(Export Password)保护PKCS#12证书文件。 一般浏览器对个人证书的导入/导出都采用PKCS#12格式,在浏览器中导入PKCS#12文件时,会提示输入的密码,即上面设置的导出密码,而原始的PEM密钥文件的保护密码不能在这里用.

▲评论

X 正在回复:
姓 名: 留下更多信息
性 别:
邮 件:
主 页:
Q Q:
来 自:
职 业:
评 论:
验 证:


Valid HTML 4.01 Strict Valid CSS!
Copyleft.A!die Software Studio.ADSS
Power by webmaster@adintr.com