zoukankan      html  css  js  c++  java
  • apache+ssl+ca

    第一步:搭建apache服务器,这在上篇博客中已经完成 http://www.cnblogs.com/sangmu/p/6422238.html
    第二步:安装ssl
    yum install mod_ssl -y    
     iptables -I INPUT 1 -p tcp --dport 443 -j ACCEPT
     service iptables save
     1 vim /etc/httpd/conf.d/ssl.conf
     2 
     3 Listen 443                   //监听的端口号
     4 <VirtualHost _default_:443>  // 配置虚拟主机,如果仅仅只是对一个网站加密,则将default改成域名
     5 DocumentRoot "/var/www/html" //网页文件所在目录
     6 ServerName www.example.com:443 // 加密网站域名
     7 SSLEngine on                 // 开启ssl
     8 SSLCertificateFile /etc/httpd/conf/ssl.crt/test.crt   //www服务器证书位置
     9 SSLCertificateKeyFile /etc/httpd/conf/ssl.key/test.key //www服务器秘钥位置
    10 SSLCACertificateFile /etc/pki/CA/ca.crt              //CA服务器证书位置
    11 SSLVerifyClient require      //是否开启双向认证,开启后 要求浏览器客户端,必须有CA颁发的证书
    12 SSLVerifyDepth  10           //双向验证层数
    至此,ssl安装完成。
    第三步:安装CA
    ①安装ca
    yum install openssl -y 
    vim /etc/pki/tls/openssl.cnf
     1 dir             = /etc/pki/CA              //目录
     2 certs           = $dir/certs               // 颁发证书位置
     3 crl_dir         = $dir/crl                 //吊销证书位置
     4 database        = $dir/index.txt           //索引表
     5 new_certs_dir   = $dir/newcerts            //新证书位置
     6 certificate     = $dir/ca.crt              //自己证书位置
     7 serial          = $dir/serial              //证书序列号
     8 crlnumber       = $dir/crlnumber           //证书吊销列表
     9 private_key     = $dir/private/ca.key      //秘钥位置
    10 countryName             = optional
    11 stateOrProvinceName     = optional
    12 organizationName        = optional
    13 organizationalUnitName  = optional
    ②创建目录和文件
    cd /etc/pki/CA
    mkdir certs newcerts crl
    touch index.txt serial
     echo 01 > serial   //导入初始序列号
    ③生成ca秘钥
    umask 077;openssl genrsa -out private/ca.key 2048  
    注:
          umask 077 //设置生成文件的权限
          genrsa //生成私钥
          -out //私钥存放路径
          2048 //2048字节计算
    ④给ca服务器生成证书申请请求
    1 openssl req -new -key ca.key -out ca.csr

     ⑤给ca用服务器的私钥给证书服务器颁发ca证书

    openssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.crt
    注:也可直接给ca颁发自己的证书ca.crt
    1 openssl req -x509 -new -key private/ca.key -out ca.crt -days 365
    2 Country Name (2 letter code) [GB]:CN                         //国家
    3 State or Province Name (full name) [Berkshire]:JS            //省份
    4 Locality Name (eg, city) [Newbury]:NT                        //地区
    5 Organization Name (eg, company) [My Company Ltd]:NTZD        //组织名
    6 Organizational Unit Name (eg, section) []:DZX                //部门
    7 Common Name (eg, your name or your server's hostname) []:test4.sangmu.com  //域名
    8 Email Address []:root                                        //邮箱
    第四步:apache 申请证书和秘钥
    ①创建目录和文件
    cd /etc/httpd/conf
    mkdir ssl.key ssl.crt
    ②生成秘钥
    umask 007;openssl genrsa -out ssl.key/test.key 2048
    ③填写证书申请请求
    umask 007;openssl genrsa -out ssl.key/test.key 2048
    第五步:颁发申请 
    1 openssl ca -in web.csr -cert ca.crt -keyfile -out web.crt
    重启服务,这个时候,在客户端可以进行加密访问了。

    补充:

      1.如果linux ca服务器给windows web 服务器颁发证书,则需要将windows网页证书申请文件导入到ca服务器中,然后颁发

    1 openssl pkcs12 -export -clcerts -in web.crt -inkey web.key -out web.p12

      2.如果ca服务器搭建在windows上,web服务器搭建在linux 上,则需要linux 通过网页申请证书,然后将证书文件进行格式转化

    1 openssl x509 -in cert.cer -inform der -outform pem -out web.crt


    如果开启双向认证,则需要给浏览器客服端颁发证书
    ①生成client秘钥client.key
    1 opensll genrsa -des3 -out client.key
    ②填写证书生成请求client.csr
    openssl req -new -key client.key -out client.csr
    
    ③颁发client证书 client.crt
    1 openssl ca -in client.csr -cert ca.crt -keyfile -out client.crt
    ④client证书格式转换
    openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12 
    
    ⑤在client端安装ca根证书ca.crt和clien证书client.p12
    至此就完成了双向验证 
    注:本次实验是在centos5.5+Windows 7 谷歌浏览器 环境中操作。

     

      

  • 相关阅读:
    小程序跳转 H5 时 cookie 值处理问题
    小程序 <web-view></web-view> 中使用 form 表单提交
    React Router 4.x 开发,这些雷区我们都帮你踩过了
    【译】使用 Flutter 实现跨平台移动端开发
    js中的 Date对象 在 IOS 手机中的兼容性问题
    thinkPHP中M()和D()的区别
    thinkphp的select和find的区别
    ThinkPHP3.1快速入门教程
    打开MSSQL 2008 R2的时候,展开数据库都显示以下的错误提示: 值不能为空。参数名viewinfo(microsoft.sqlserver.management.sqlstudio.explorer)
    原型模式(Prototype Pattern)
  • 原文地址:https://www.cnblogs.com/sangmu/p/6423420.html
Copyright © 2011-2022 走看看