HTTPS-Linux服务器Nginx配置、Android客户端证书生成



HTTPS-Linux服务器Nginx配置、Android客户端证书生成.

实现HTTPS通信:

Server端在WEB服务器Nginx 上配置Https连接,接收Https连接请求,实现Https协议。

安卓客户端加载可信证书,BKS格式证书。该证书从服务器端证书导出来。

 

(一)       Linux服务器端配置步骤

#号表示命令引导符

1. 首先确保机器上安装了openssl和openssl-devel

 

#yum install openssl

#yum install openssl-devel

 

2. 然后就是自己颁发证书给自己

 

1)        切换到Nginx的配置文件目录

#cd/usr/local/nginx/conf

 

2)        生成RSA非对称密钥:包括公钥和私钥;参数中-des3是密钥文件的加密算法,这个生成过程中会要求操作人输入des3算法的密码,比如:123456

#openssl genrsa-des3 -out server.key 1024

 

3)        基于上面生成的密钥,生成“签名请求”文件,准备用于签名。生成Certificate Signing Request(CSR),生成的csr文件交给CA签名后形成服务端自己的证书.屏幕上将有提示,依照其指示一步一步输入要求的个人信息即可.

#openssl req-new -key server.key -out server.csr

 

4)        由于密钥文件是使用des3加密过的,所以为了使用方便,去掉加密,即生成的server_nopwd.key为去掉加密的密钥文件。


#openssl rsa -inserver.key -out server_nopwd.key

 

5)        生成证书,并签名:-days表示证书有效期,这里设置为3650天(10年),最后的输出文件为server.crt即服务器端证书。

#openssl x509-req -days 3650 -in server.csr -signkey server_nopwd.key -out server.crt

 

6)        配置Nginx

server {

   listen 443;

    sslon;

   ssl_certificate /usr/local/nginx/conf/server.crt;

   ssl_certificate_key /usr/local/nginx/conf/server_nopwd.key;

}

         重启Nginx

ps:如果出现“[emerg] 10464#0: unknown directive “ssl” in/usr/local/nginx-0.6.32/conf/nginx.conf:74”则说明没有将ssl模块编译进nginx,在configure的时候加上“–with-http_ssl_module”即可^^

至此已经完成了https服务器搭建,但如何让浏览器信任自己颁发的证书呢?

今天终于研究捣鼓出来了,只要将之前生成的server.crt文件导入到系统的证书管理器就行了,具体方法:

控制面板 -> Internet选项 -> 内容 -> 发行者 -> 受信任的根证书颁发机构 -> 导入 -》选择server.crt

 

(二)       安卓客户端证书生成

使用JDK自带的keytool工具,把服务器端CRT格式的证书导出一个BKS格式的证书,由于JDK自带的不支持BKS,所以需要一个第三方Jar包支持:bcprov-ext-jdk15on-150.jar.

 

keytool -importcert -keystore client.bks -file server.crt  -storetype BKS -providerclassorg.bouncycastle.jce.provider.BouncyCastleProvider -providerpath./bcprov-ext-jdk15on-150.jar -storepass 123456