- 注册时间
 - 2012-11-28
 - 最后登录
 - 2021-2-12
 - 阅读权限
 - 200
 - 积分
 - 3774
 - 精华
 - 0
 - 帖子
 - 116
  
 
 
 
    
 
ta_mind  | mb_qb7 2013-3-19 01:56 | 
|---|
 
  classn_01: 366 classn_02 [LV.9]以坛为家II 
 | 
1.首先要生成服务器的私钥: 
openssl genrsa -des3 -out server.key 2048 
 
{注:openssl rsa -in server.key -out server.key 
执行这个命令之后,再启动nginx时,就无需输入密码} 
 
 
2. 用server.key生成一个证书 
openssl req -new -key server.key -out server.csr 
生成的csr 文件交给CA机构签名后,形成服务器自己的证书。按照提示,提供服务器证书的相关信息。 
 
 
3. 对客户端也做同样的命令生成key及csr文件 
openssl genrsa -des3 -out client.key 2048 
 
 
4. 用client.key 生成一个证书 
openssl req -new -key client.key -out client.csr 
 
 
5. 生成CSR证书文件必须有CA机构的签名才可以形成证书。这里制作自己的CA生成一个key文件CA.key和一个根证书ca.crt 
openssl req -new -x509 -keyout ca.key -out ca.crt 
 
7. 创建openssl.conf 生成的配置文件,输入一下命令 
 
#根据openssl.cnf生成配置文件 
touch /etc/pki/CA/{index.txt,serial} 
  
#设置副本名称开始内容 
echo 01 > /etc/pki/CA/serial 
  
#设置副本证书存放目录 
mkdir /etc/pki/CA/newcerts 
 
 
8. 用CA的证书为刚才生成的server.csr 和 client.csr进行文件签名 
 
a:为服务器颁发证书 
openssl ca -in server.csr -out server.crt -cert ca.crt-keyfile ca.key 
 
注:该命令执行后需要选择两次[y/n],我们输入y,即可。 
 
 
b: 为客户端颁发证书 
openssl ca -in client.csr -out client.crt -cert ca.crt-keyfile ca.key 
 
 
9:证书格式转换 
 
#IE浏览器需要p12证书,所以需要签发p12证书,用于IE签发: 
openssl pkcs12 -export -clcerts -in client.crt -inkeyclient.key -out client.p12 
  
#IOS 证书签发格式 
openssl x509 -in client.crt -out client.cer 
  
#Android 证书签发格式 
openssl pkcs12 -export -in client.crt -inkey client.key -out client.pfx 
  
#pem格式证书 
openssl pkcs12 -export -in ddmdd_a.pfx -out client.pem 
 
 
 
 
10 其他: 
a. 删除私钥密码: 
#删除私钥密码 
openssl rsa -in client.key -out client_open.key 
 
b. 证书撤销 
echo 01 >  crlnumber 
openssl ca -keyfile ca.key -cert ca.crt -revoke client.crt #从CA中撤销证书client.crt 
openssl ca -gencrl -keyfile ca.key -cert ca.crt -outclient.crl  #生成或更新撤销列表 
 
 
c. 查看证书信息 
openssl x509 -in client.pem -noout -text 
 
d.  
client 浏览器需要使用的文件:ca.crt,client.crt,client.key,client.pfx 
server 端使用的文件有:     ca.crt,server.crt,server.key 
 
 
11. 配置Nginx SSL 
 
server { 
       listen         443ssl; 
       server_name    smsapi.chunbo.com; 
       root          /var/www/smsapi.david.com; 
  
       ssl on; 
       ssl_certificate       /etc/nginx/conf.d/server.crt; 
       ssl_certificate_key    /etc/nginx/conf.d/server.key; 
       ssl_client_certificate /etc/nginx/conf.d/ca.crt; 
  
       ssl_verify_client      off; 
       ssl_session_timeout    5m; 
       ssl_protocols   SSLv2 SSLv3TLSv1; 
       ssl_ciphers    HIGH:!aNULL:!MD5; 
       ssl_prefer_server_ciphers  on; 
  
       location / { 
           indexindex.php index.html; 
       } 
  
       location ~ \.php$ { 
           include       /etc/nginx/fastcgi_params; 
           if (-f$request_filename) { 
              fastcgi_pass  127.0.0.1:9000; 
           } 
          fastcgi_index  index.php; 
          fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name; 
       } 
} 
  
  
#nginx 配置完成,reloadNginx服务 
 
12. 客户端导入证书 
证书安装及使用把刚才生成的证书:根证书ca.crt和客户端client.crt(client.pfx)安装到客户端,ca.crt安装到信任的机构,client.crt直接在windows安装或安装到个人证书位置。(如果是IE浏览器,需要安装client.pfx证书,在导入的时候需要输入证书签发的密码) 
 
 
13. 测试 
 
接下来就可以通过浏览器进行测试。有的时候可能会作为一个API接口提供其它程序进行调用,比如我使用pythonrequests进行调用 
import requests 
  
responseObj = requests.get(' cert=('/path/client.crt','/path/client.key' ) ) 
  
data = responseObj.text 
  
或: 
  
responseObj = requests.get(' verify='/path/client.pem') 
data = responseObj.text 
 
如果是JAVA程序,需要P12格式证书。根据自己的需求进行选择。 
  给予Nginx+openssl 部署已经完成。 
 
 |   
 
  
 |