1. 前期的准备工作:
安装openssl和nginx的https模块
cd ~/
mkdir ssl
cd ssl
mkdir demoCA
cd demoCA
mkdir newcerts
mkdir private
touch index.txt
echo '01' > serial
2. 制作CA证书(这个是信任的起点,根证书,所有其他的证书都要经过CA的私钥签名)。
生成 CA私钥: ca.key
openssl genrsa -des3 -out ca.key 2048
这样是生成rsa私钥,`des3`算法,openssl格式,2048位强度。`ca.key`是密钥文件名。为了生成这样的密钥,需要一个至少四位的密码。
另外可以通过以下方法生成没有密码的key:
opensslrsa -in ca.key -out ca_decrypted.key
生成 CA根证书的公钥 ca.crt:
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
3. 制作网站的https证书,并用CA签名认证。
假设我们需要为 test.com 域名制作证书,先生成 test.com的证书私钥 test.com.pem。
命令:
openssl genrsa -des3 -out test.com.pem 1024
生成无密码的私钥:
openssl rsa -in test.com.pem -out test.com.key
生成 csr 签名请求:
openssl req -new -key test.com.pem -out test.com.csr
这里需要输入国家,地区,组织,email等。最重要的是**common name**,可以写你的名字或者域名。如果为了 https 申请,这个必须和域名一样,即,这里要写test.com,否则会引发浏览器警报,这里可以用 *.test.com 来做泛域名证书。
最后要用CA证书进行签名:
openssl ca -policy policy_anything -days 1460 -cert./demoCA/ca.crt -keyfile ./demoCA/ca.key -in test.com.csr -out test.com.crt
把 ca.crt 的内容追加到 test.com.crt后面,因为有些浏览似乎不支持:
cat demoCA/ca.crt >> test.com.crt
4. nginx配置
server {
listen 443;
server_name test.com www.test.com;
root html;
index index.html index.htm;
ssl on; #开启ssl
ssl_certificate /PATH/TO/test.com.crt; #服务器证书位置
ssl_certificate_key/PATH/TO/test.com.key; #服务器私钥
ssl_session_timeout 5m; #session有效期,5分钟
ssl_protocols SSLv3 TLSv1TLSv1.1 TLSv1.2; #ssl协议
ssl_ciphers"HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES"; #ssl加密算法
ssl_prefer_server_cipherson;
location / {
try_files $uri $uri/ =404;
}
}
1. 其他,其实很多时候,并不需要加密的 key,所以像这面这么做就好了。
命令如下:
cd ~/
mkdir ssl
cd ssl
mkdir demoCA
cd demoCA
mkdir newcerts
mkdir private
touch index.txt
echo '01' > serial
openssl genrsa -out ca.key 2048
openssl req -new -x509 -days 3650 -keyca.key -out ca.crt
cd ..
openssl genrsa -out test.com.key 2048
openssl req -new -key test.com.key -out test.com.csr
openssl ca -policy policy_anything -days1460 -in test.com.csr -out test.com.crt -cert ./demoCA/ca.crt -keyfile./demoCA/ca.key
原文文章链接:http://www.tuicool.com/articles/NrmE3e