美文网首页
https环境

https环境

作者: 16325 | 来源:发表于2020-04-17 15:25 被阅读0次

    开发中的一个需求,需要https环境中测试。原来开发环境只有一个jboss。
    生产环境有F5,在F5上配置的证书,并卸载证书,F5后边是apache-jboss。到apache的时候已经是http请求了,所以开发环境也要经过两次跳转。开发环境使用nginx-apache-jboss这种结构。nginx上配置证书。

    安装nginx

    一、安装编译工具及库文件

    yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

    二、首先要安装 PCRE
    • 查看是否已经安装

    pcre-config --version

    • 如果没有安装,下载 , 解压,进目录
    • 编译安装

    ./configure
    make && make install

    三、安装nginx
    • 下载,解压,进入目录
    • 编译安装

    ./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35
    make
    make install

    • 查看nginx版本

    /usr/local/webserver/nginx/sbin/nginx -v

    四、Nginx 配置
    • 制作证书
      方法一:
    openssl genrsa -out server.key 4096
    openssl req -new -key server.key -out server.csr
    按提示输入一系列的参数
    Country Name (2 letter code) [AU]:CN ISO国家代码(只支持两位字符) 
    State or Province Name (full name) [Some-State]:XX所在省份 
    Locality Name (eg, city) []:XX所在城市
    Organization Name (eg, company):XXXXX公司名称
    Organizational Unit Name (eg, section) []:XXXXX组织名称
    Common Name (eg, YOUR name) []:[X](http://kedou.com/)XX申请证书的域名 
    Email Address []:admin@[admin.com](http://admin.com/) 管理员邮箱
    Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: 交换密钥
    An optional company name []: 
    
    注:Common Name必须(?)和httpd.conf中server name必须一致,否则apache不能(?)启动 (启动apache时错误提示为:RSA server certificate CommonName (CN) `Kedou' does NOT match server name!? )
    
    openssl req -x509 -days 3650 -key server.key -in server.csr -out server.crt
    

    方法二:

    openssl genrsa -out ca.key 4096
    openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
    openssl genrsa -out server.key 4096
    openssl req -new -out server.csr -key server.key
    按提示输入一系列的参数
    Country Name (2 letter code) [AU]:CN ISO国家代码(只支持两位字符) 
    State or Province Name (full name) [Some-State]:XX所在省份 
    Locality Name (eg, city) []:XX所在城市
    Organization Name (eg, company):XXXXX公司名称
    Organizational Unit Name (eg, section) []:XXXXX组织名称
    Common Name (eg, YOUR name) []:[X](http://kedou.com/)XX申请证书的域名 
    Email Address []:admin@[admin.com](http://admin.com/) 管理员邮箱
    Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: 交换密钥
    An optional company name []: 
    openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
    

    查看conf目录下是否正常生成了server.key server.csr server.crt三个文件
    以上两种方式本质上是一样的,都是自己充当认证服务器,完成证书认证得到自签名的证书,可以认为方法一是方法二的简写方式。

    • 配置nginx.conf 以下为关键配置(服务器ip为10.221.10.1)
    http {
       server {
            listen       80;
            server_name  dev.test.com 10.221.10.1;
            return 302 https://$server_name$request_uri;
       }
        # HTTPS server
        server {
            listen       443 ssl;
            server_name  10.221.10.1 dev.test.com;
            ssl_certificate      /opt/app/nginx-1.16.1/certs/current/server.crt;
            ssl_certificate_key  /opt/app/nginx-1.16.1/certs/current/server.key;
            location /busi/ {
               proxy_pass http://10.221.10.2:80$request_uri;
               proxy_redirect http://10.221.10.2 https://dev.test.com;
            }
            location /cas/ {
                proxy_pass http://10.221.10.2:80$request_uri;
                proxy_redirect http://10.221.10.2 https://dev.test.com;
            }
          }
    }
    

    以上,将/busi 和 /cas的请求都转发到apache(10.221.10.2)身上。

    • 其他配置,有个功能是长连接,所以这里要设置连接超时时长
        proxy_connect_timeout   300;
        proxy_send_timeout      300;
        proxy_read_timeout      300;
        proxy_buffer_size       16k;
        proxy_buffers           4 64k;
        proxy_busy_buffers_size 128k;
        proxy_temp_file_write_size 128k;
    
    五、Nginx 启动
    • 启动nginx

    /usr/local/webserver/nginx/sbin/nginx

    • 常用的几个命令

    /usr/local/webserver/nginx/sbin/nginx -s reload # 重新载入配置文件
    /usr/local/webserver/nginx/sbin/nginx -s reopen # 重启 Nginx
    /usr/local/webserver/nginx/sbin/nginx -s stop # 停止 Nginx

    安装apache

    一、安装必须软件
    二、安装apache
    • 下载apache
    • 解压进入目录安装
    • 配置

    ./configure --prefix=/usr/local/apache2 --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr/ --with-pcre=/usr/local/pcre-8.36

    • 编译安装
    • 如果apache也需要开启https,需要确认apache是否已经安装ssl相关module(主要为:mod_ssl.so),如果未安装, 需重新安装apache并选择加载ssl相关模块,重新编译apache,加上--enable-ssl --with-ssl参数,把ssl模块加入到已经编译好的apache中
    三、配置apache
    <VirtualHost *:80>
        DocumentRoot "/DATA/httpd-2.2.34/htdocs"
        ServerName 10.221.10.2
        DirectoryIndex /test/index.html
       <Directory "/webdocs">
        AllowOverride None
        Options None
        Order allow,deny
        Allow from all
       </Directory>
    </VirtualHost>
    
    LoadModule proxy_ajp_module modules/proxy/mod_proxy_ajp.so
    LoadModule advertise_module modules/mod_cluster/mod_advertise.so
    LoadModule manager_module modules/mod_cluster/mod_manager.so
    LoadModule slotmem_module modules/mod_cluster/mod_slotmem.so
    LoadModule proxy_cluster_module modules/mod_cluster/mod_proxy_cluster.so
    
    # MOD_CLUSTER_ADDS
    # Adjust to you hostname and subnet.
    <IfModule manager_module>
      Listen 10.221.10.2:6666
      NameVirtualHost 10.221.10.2:6666
      ManagerBalancerName myCluster
      Maxcontext 300
      Maxnode 100
      Maxhost 100
      <VirtualHost 10.221.10.2:6666>
        <Directory />
         Order deny,allow
         Deny from all
         Allow from 10.221
         Allow from 172.29
        </Directory>
        KeepAliveTimeout 300
        MaxKeepAliveRequests 0
        ServerAdvertise off
        #ServerAdvertise on http://@IP@:6666
        #AdvertiseFrequency 5
        #AdvertiseSecurityKey secret
        #AdvertiseGroup @ADVIP@:23364
        EnableMCPMReceive
    
        <Location /mod_cluster_manager>
           SetHandler mod_cluster-manager
           AuthType Basic
           AuthName "MCM"
           AuthUserFile /etc/modclusterpassword
           Require user admin
           Order deny,allow
           Deny from all
           Allow from 10.221
           Allow from 127.0.0.1
        </Location>
    
      </VirtualHost>
    </IfModule>
    

    安装jboss

    一、下载安装
    • 直接从原有项目复制即可
    二、配置jboss
    • 无特殊配置
    • 启动脚本增加参数

    -Djboss.mod_cluster.proxyList=10.221.10.2:6666

    程序访问限制

    • 如果用浏览器访问上边搭建好的https地址,会提示证书不安全,需要确认后才可以访问。
    • 如果是用程序进行https接口调用,可以用编码的方式信任证书。
    • 如果程序不便改动,那么可以通过以下方式处理:比如busi项目需要访问/cas项目进行登录有效性的验证。
      1.将cas的证书导入到busi的jvm中。首先拿到cas的证书,也就是cas所在nginx的证书server.crt,放到busi项目的服务器上。
      2.执行以下命令进行导入。

    keytool -import -keystore "/opt/app/jboss-eap-6.4/jdk1.8.0_144/jre/lib/security/cacerts" -file ./server.crt -alias mycas -trustcacerts

    可能要求输入密码,默认密码是: changeit

    • 导入成功后即可访问
    • 注意 必须使用域名的方式才可以,而且证书的域名必须和cas的域名匹配 生成证书填写Common Name (eg, YOUR name) []:XX申请证书的域名这一步的时候,不能空着,要配置成cas服务器的域名才可以,就是说必须和我们要访问的域名一样,才可以。
    • busi服务器需要添加host,指定ip和域名的对应关系
    • 如果busi访问报错:异常信息: javax.net.ssl.SSLProtocolException,handshake alert: unrecognized_name。 给启动脚本增加参数:-Djsse.enableSNIExtension=false。然后重启jboss。

    总结

    • 至此,整个nginx-apache-jboss的环境搭建完毕。

    相关文章

      网友评论

          本文标题:https环境

          本文链接:https://www.haomeiwen.com/subject/btqevhtx.html