自建https证书,并使用nginx做代理,部署网站

    公司现在做的是医疗项目,现在使用的还全部是http网络协议;一方面现在数据是裸奔状态对用户信息没有保障,另一方面https已经是大势所趋,因为用户们对自己的信息安全也越来越重视;还有从技术上来说,如果使用https网络协议,就免去了自己去做加密这一部分工作。 

    所以想自己先做一个完整的测试,为后续项目的更新打下基础;先说一下我的环境:centos6.5操作系统,用nginx做代理,网站部署在tomcat上面,网站开发用的是jsp。

   由于是内网测试,所以需要自己假设一台DNS服务器,或者修改本机的hosts文件,可以进行域名访问,我的是mac系统,我修改了本机的hosts文件,如下:

   sudo vi /etc/hosts

   然后在里面加入下面一句,前面是服务器ip地址,后面是域名:

 192.168.9.12 101.linuxidc.com 

    一、大致步骤。

    1、安装openssl,需要首先安装gcc、zlib,一般系统自带的openssl版本过旧需要安装新的,看我的另一篇文章:安装openssl 

    2、生成自签证书,并给证书请求文件签名

    3、安装nginx(https环境),需要首先安装pcre、zlib、openssl,看我的另一篇文章:安装nginx(支持SSL模块) ,然后配置nginx.

    二、说下自签过程(转自:http://www.linuxidc.com/Linux/2016-09/134826.htm)

    

前提:

    1、主机要先安装openssl

    2、编译安装nginx时,要加上--with-openssl和--with-http_ssl_module

1、生成自签字证书
[root@101 /]# openssl req -new -x509 -keyout /root/ca.key -out /root/ca.crt 
Generating a 2048 bit RSA private key 
.............+++ 
...................................+++ 
writing new private key to '/root/ca.key'
Enter PEM pass phrase:        #输入密钥保护密码 
Verifying - Enter PEM pass phrase:    #确认密码保护密码 
----- 
You are about to be asked to enter information that will be incorporated 
into your certificate request. 
What you are about to enter is what is called a Distinguished Name or a DN. 
There are quite a few fields but you can leave some blank 
For some fields there will be a default value, 
If you enter '.', the field will be left blank. 
----- 
Country Name (2 letter code) [XX]:CN 
State or Province Name (full name) []:guangzhou 
Locality Name (eg, city) [Default City]:guangzhou 
Organization Name (eg, company) [Default Company Ltd]:linuxidc 
Organizational Unit Name (eg, section) []:it 
Common Name (eg, your name or your server's hostname) []:101.linuxidc.com 
Email Address []:root@linuxidc.com

2、修改配置文件openssl.cnf

vim /etc/pki/tls/openssl.cnf 
[ ca ] 
default_ca      = CA_default            # The default ca section 
  
#################################################################### 
[ CA_default ] 
  
dir            = /etc/pki/CA          #证书的根目录,要记住这个目录 
certs          = $dir/certs            
crl_dir        = $dir/crl              
database        = $dir/index.txt        
#unique_subject = no                    
                                          
new_certs_dir  = $dir/newcerts        
  
certificate    = $dir/ca.crt      # 修改这里,表示签名时使用的证书 
serial          = $dir/serial          
crlnumber      = $dir/crlnumber        
                                          
crl            = $dir/crl.pem          
private_key    = $dir/private/cakey.pem 
RANDFILE        = $dir/private/.rand

3、复制证书到证书根目录/etc/pki/CA下,并在该目录下创建空文件index.txt和serial,并向serial输入”01“
cd /etc/pki/CA
cp /root/ca.crt . 
touch index.txt 
touch serial 
echo "01" >serial

4、生成服务器RSA私钥/root/server.key

openssl genrsa -des3 -out /root/server.key 1024

5、为私钥去除口令
openssl rsa -in /root/server.key -out /root/server_nopwd.key

5、生成证书请求文件/root/server.csr
[root@101 /]# openssl req -new -key /root/server.key -out /root/server.csr 
Enter pass phrase for /root/server.key:    #输入第4步生成的密钥的保护密码 
You are about to be asked to enter information that will be incorporated 
into your certificate request. 
What you are about to enter is what is called a Distinguished Name or a DN. 
There are quite a few fields but you can leave some blank 
For some fields there will be a default value, 
If you enter '.', the field will be left blank. 
--------下面这部分应该和创建私有证书时填的一样------------------------ 
Country Name (2 letter code) [XX]:CN 
State or Province Name (full name) []:guangzhou 
Locality Name (eg, city) [Default City]:guangzhou 
Organization Name (eg, company) [Default Company Ltd]:linuxidc 
Organizational Unit Name (eg, section) []:it 
Common Name (eg, your name or your server's hostname) []:101.linuxidc.com 
---------------------------------------------------------------- 
Email Address []:root@linuxidc.com 
  
Please enter the following 'extra' attributes 
to be sent with your certificate request 
A challenge password []:www.linuxidc.com 
An optional company name []:linuxidc

6、用私有证书给证书请求文件/root/server.csr签名
[root@101 CA]# openssl ca -in /root/server.csr -out /root/server.crt -cert /root/ca.crt -keyfile /root/ca.key -config /etc/pki/tls/openssl.cnf 
Using configuration from /etc/pki/tls/openssl.cnf 
Enter pass phrase for ca.key: 
Check that the request matches the signature 
Signature ok 
Certificate Details: 
        Serial Number: 1 (0x1) 
        Validity 
            Not Before: Aug 31 14:09:15 2016 GMT 
            Not After : Aug 31 14:09:15 2017 GMT 
        Subject: 
            countryName              = CN 
            stateOrProvinceName      = guangzhou 
            organizationName          = linuxidc 
            organizationalUnitName    = it 
            commonName                = 101.linuxidc.com 
            emailAddress              = root@linuxidc.com 
        X509v3 extensions: 
            X509v3 Basic Constraints:  
                CA:FALSE 
            Netscape Comment:  
                OpenSSL Generated Certificate 
            X509v3 Subject Key Identifier:  
                18:80:30:B7:C6:11:61:AE:F3:62:9D:D0:33:D9:97:CB:45:5A:31:91 
            X509v3 Authority Key Identifier:  
                keyid:DA:99:4B:9B:29:A8:D8:14:54:FA:52:4B:1E:C3:E0:81:C6:A6:EF:42 
  
Certificate is to be certified until Aug 31 14:09:15 2017 GMT (365 days) 
Sign the certificate? [y/n]:yes
  
  
out of 1 certificate requests certified, commit? [y/n]y 
Write out database with 1 new entries 
Data Base Updated


7、编辑nginx配置文件/etc/nginx/nginx.conf
-------在配置文件的特定区域加入/修改下面内容 
server { 
        listen      443 ssl;        #设置监听的端口 
        server_name  linuxidc; 
        ssl    on; 
        ssl_certificate /root/server.crt; 
        ssl_certificate_key    /root/server_nopwd.key;

8、重启服务
~~~~完成,在客户端上输入https://x.x.x.x即可访问


上面配置好以后,由于网站部署在tomcat下面并且是用jsp开发的,所以还需要配置nginx访问静态资源,完整配置如下:

server {

        listen       443;

        server_name  101.linuxidc.com;

        location / {

                proxy_pass http://192.168.9.12:8081/;

                root /项目名/;

                proxy_redirect off ;

                proxy_set_header Host $host;

                proxy_set_header  X-Real-IP  $remote_addr;

                proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;

                proxy_set_header X-Forwarded-Proto  $scheme;

                proxy_next_upstream error timeout invalid_header;

        }

        location ~ .*\.(html|htm|ico|png|jpg|jpeg|js|css|bmp)$ {

            proxy_pass http://192.168.9.12:8081;

       }


    }


tomcat下面的server.xml也需要配置:

1、在Engine标签下面加入<Value .......,同时nginx也加入

nginx:

proxy_set_header  X-Real-IP  $remote_addr;

proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Forwarded-Proto  $scheme;

tomcat server.xml:

<Engine name="Catalina" defaultHost="localhost">

      <Valve className="org.apache.catalina.valves.RemoteIpValve"

remoteIpHeader="X-Forwarded-For"

protocolHeader="X-Forwarded-Proto"

protocolHeaderHttpsValue="https"/>

这样配置,可以是jsp中的request.getScheme()等函数,取到的一直是http而非实际的http或https。


2、server.xml中,Host标签下,需要添加Context标签,这样可以不用加项目名字直接通过域名访问,比如www.baidu.com而不是www.baidu.com/baidu

<Host name="localhost"  appBase="webapps"

            unpackWARs="true" autoDeploy="true">

<Context path="" docBase="/home/wlwyl/apache-tomcat-doc/webapps/项目名" debug="0" />


    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值