Apache SSL 学习笔记(一)
by adie
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
常用命令:
- 合并证书和私钥 openssl pkcs12 -export -in cer.cer -out all.p12 -inkey key.key
- 验证证书颁发者 openssl verify -CAfile ca.cer cer.cer
- 转换pem成der(二进制流) openssl x509 -inform der -in cer.der -outform pem -out out.pem
- 转换der成pem(Base64编码) openssl x509 -inform pem -in cer.pem -outform der -out out.der
- 查看版本信息 openssl version -a
- 进行 base64 编码: openssl base64 -in input.bin -out output.txt
- 解码 base64: openssl base64 -d -in input.txt -out output.bin
- 用 base64 编码字符串: echo "hello world" | openssl base64
- 解码 base64 字符串: echo "IlRoZSBMaW51eCBKb3VybmFsIiANCg==" | openssl base64 -d (Windows 不可用)
- 计算文件的 MD5 值: openssl md5 input.txt
- 计算文件的 SHA1 值: openssl sha1 input.txt
6. OpenSSL 证书相关命令
- 生成 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 输出为不加密的文件. 当然,运行过程中会提示输入密码.
- 生成证书请求文件(.csr): openssl req -new -key file.key -out file.csr
生成请求文件时会要求输入相关的信息, 使用 "." 可留空, CN(Common Name)需要与网站域名匹配, 否则可能会被某些浏览器拒绝. 可以使用通配模式,形如:*.snakeoil.com
可以使用 openssl req -noout -text -in file.csr 查看生成的请求的相关信息.
- 对 CSR 文件进行签名生成证书
- 自签名(使用生成 csr 文件的 key 来对 csr 文件签名): openssl x509 -req -in file.csr -out file.cer -signkey file.key -days 3650
- 使用 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
- 生成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密钥文件的保护密码不能在这里用.
▲评论