设为首页 收藏本站
查看: 807|回复: 0

[经验分享] openssl + apache + mod_ssl安装配置调试过程-

[复制链接]

尚未签到

发表于 2018-11-27 13:43:02 | 显示全部楼层 |阅读模式
  openssl + apache + mod_ssl安装配置调试过程
From:http://sagely.bokee.com/820257.html源码分析参考:http://blog.csdn.net/tingya/category/119274.aspx主要介绍在linux下怎么搭建一个包含mod_ssl模块的apache服务器,并且如何根据不同的要求配置SSL一 下载  1,从openssl.org下载openssl到/usr/local
  2.从apache.org下载apache到/usr/local
  3.从modssl.org下载mod_ssl到/usr/local
  二 解压缩
  cd /usr/local
  tar zxvf openssl-0.9.7e.tar.gz
  tar zxvf mod_ssl-2.8.22-1.3.33.tar.gz
  tar zxvf apache-1.3.33.tar.gz
  三 更改一下名字
  mv openssl-0.9.7e openssl
  mv mod_ssl-2.8.22-1.3.33 mod_ssl
  mv apache-1.3.33 apache
  四 编译openssl
  cd openssl
  ./config --prefix=/usr/local/openssl
  make
  make install
  五 编译mod_ssl
  cd ../mod_ssl
  ./configure --with-apache=../apache
  六 编译apache
  SSL_BASE=../openssl ./configure --enable-module=SSL
  make
  make install
  到这里为止,已经把准备工作做好了,假如按照前面的步骤来的话应该是没有问题的.但是有几次我出现了openssl不能用,apache出怪毛病的问题,呵呵最好的办法就是删除了重新安装(呵呵是不是很没追求!)
  七 建立自己的CA
  cd /
  mkdir CAroot     建立自己的CA目录,我不知道这样为CA建一个目录好不好
  cd CAroot
  cp /usr/local/openssl/ssl/openssl.cnf ./openssl.cnf   将CA配置文件拷过来
  vi openssl.cnf     修改配置文件中的dir,将./demoCA修改为/CAroot
  mkdir newcerts
  mkdir certs
  mkdir crl
  mkdir private
  vi index.txt       可以不写数据,直接:wq
  vi serial         写入00,然后:wq
  vi ./private/.rand   写入两行随机数,然后:wq
  #呵呵,上面所作的这些全是根据openssl.cnf来的
  openssl req -new -newkey -x509 rsa:1024 -keyout ./private/cakey.pem -out cacert.pem 为CA生成密钥和证书
  八 为apache生成密钥和证书
  cd /usr/local/apache/conf/ssl.crt
  openssl req -new -newkey rsa:1024 -keyout ../ssl.key/server.key -out ../ssl.csr/server.csr 生成证书请求和密钥
  openssl ca -in ../ssl.csr/server.csr -out server.crt -config /CAroot/openssl.cnf       用CA私钥签名证书请求
  #现在已经得到了服务器的证书和私钥
  九 修改httpd.conf
  cd ..
  vi httpd.conf
  将ServerName 更改为sage 不设也可以,不过会出现警告
  将SSLCertificateFile修改为/usr/local/apache/conf/ssl.crt/server.crt
  将SSLCertificateKeyFile修改为/usr/local/apache/conf/ssl.key/server.key
  #这是最基本的设置了,先用用试试看吧.
  十 启动服务
  /sbin/service iptables stop   这是要关掉防火墙了,呵呵我也不知道这样安全不安全,不过要是不关掉的话客户端将无法访问
  /usr/local/apache/bin/apachectl startssl
  十一 从客户端测试
  从局域网找个windows电脑(LINUX也行)输入https://192.168.10.10 记住是https,要使http就直接不验证就通过了
  此时将会出现一个对话框,一般第二个是对,毕竟时间都是有效的嘛.第三个是叹号那是因为访问站点与证书通用名不匹配,这需要在用openssl生成apache服务器证书时将通用名设定为192.168.10.10,第一个叹号是因为没有安装CA根证书,这时将/CAroot/cacert.pem拷到客户机安装就可以了,重新打开浏览器输入https://192.168.10.10,怎么什么反应也没有就进去了呢,呵呵,其实已经对服务器进行认真了,这和http://192.168.10.10有本质区别.
  十二 配置更多的SSL应用(这个在/usr/local/apache/htdocs/manual/mod/mod_ssl有详细文档)
  1,实现对客户端的认证
  修改httpd.conf
  SSLVerifyClient require
  SSLVerifyDepth 1
  SSLCACertificateFile /CAroot/cacert.pem
  现在在客户端输入https://192.168.10.10 ,将要求出示证书,那现在就生成一个客户PKCS格式证书吧
  cd /usr/local/apache/conf/ssl.crt
  openssl req -new -newkey rsa:1024 -keyout ../ssl.key/client.key -out ../ssl.csr/client.csr   生成证书请求和密钥
  openssl ca -in ../ssl.csr/client.csr -out client.crt -config /CAroot/openssl.cnf         用CA私钥签名证书请求
  openssl pkcs12 -export -clclient -inkey ../ssl.key/client.key -in client.crt -out /home/share/client.p12
  #/home/share目录是samba服务器的共享目录,一般是将client.p12放在USBkey中,为了方便所以直接共享了.
  在客户端上安装client.p12,呵呵这样就可以实现双方的认证了,双方通信也实现了SSL.(to be continuing)
  2:某些页面只允许持有证书的客户访问,其他页面允许所有人访问
  修改httpd.conf,当然需要先作一些页面的准备,/usr/local/apache/htdocs/secure是我们放只允许有证书访问的目录
  SSLVerifyClient none
  SSLCACertificateFile conf/ssl.crt/ca.crt
  
  SSLVerifyClient require
  SSLVerifyDepth 1
  
  3.某些页面只允许持有某种特定证书内容的客户访问,其它页面允许所有人访问
  在这里我假设允许我们局域网的人访问
  SSLVerifyClient     none
  
  SSLVerifyClient     require
  SSLVerifyDepth     5
  SSLCACertificateFile conf/ssl.crt/ca.crt
  SSLCACertificatePath conf/ssl.crt
  SSLOptions       +FakeBasicAuth
  SSLRequireSSL
  SSLRequire       %{SSL_CLIENT_S_DN_O} eq "ATR" and \
  %{SSL_CLIENT_S_DN_OU} in {"305", "307", "309","313"}
  
  4.允许局域网用户使用http访问局域网站点,但是需要外网用户使用强加密的https访问.
  假设局域网用户ip为192.160.1.0-24.
  下面的修改要放在HTTPS虚拟主机的外面,这样就可以同时适用于http和https访问
  SSLCACertificateFile conf/ssl.crt/company-ca.crt
  
  #   Outside the subarea only Intranet access is granted
  Order           deny,allow
  Deny           from all
  Allow           from 192.168.1.0/24
  
  
  #   Inside the subarea any Intranet access is allowed
  #   but from the Internet only HTTPS + Strong-Cipher + Password

  #   or the>  #   If HTTPS is used, make sure a strong cipher is used.
  #   Additionally allow client certs as>  SSLVerifyClient     optional
  SSLVerifyDepth     1
  SSLOptions       +FakeBasicAuth +StrictRequire
  SSLRequire       %{SSL_CIPHER_USEKEYSIZE} >= 128
  #   Force clients from the Internet to use HTTPS
  RewriteEngine     on
  RewriteCond       %{REMOTE_ADDR} !^192\.168\.1\.[0-9]+$
  RewriteCond       %{HTTPS} !=on
  RewriteRule       .* - [F]
  #   Allow Network Access and/or Basic Auth
  Satisfy         any
  #   Network Access Control
  Order           deny,allow
  Deny           from all
  Allow           192.168.1.0/24
  #   HTTP Basic Authentication
  AuthType         basic
  AuthName         "Protected Intranet Area"
  AuthUserFile       conf/protected.passwd
  Require         valid-user
  
  有关SSL配置apache的指令(呵呵,在/usr/local/apache/htdocs/manual/mod/mod_ssl中有更详细的解释)
  1.SSLCACertificatePath
  语   法:SSLCACertificatePath /to/CA/certificates
  应用环境:server config ,virtual host
  默认设置:none
  该指令为Certificate Authority证书文件指定一个目录
  2.SSLCACertificatefile
  语   法:SSLCACertificatefile CA_certificate_filename
  应用环境:server config ,virtual host
  默认设置:none
  该指令为指定一个包含Certificate Authority证书的文件
  3.SSLBanCipher
  语   法:SSLBanCipher Cipher
  应用环境:pre-directory config(.htaccess)
  使用该指令可以禁止那些想使用cipher的用户对Apache进行配置
  4.SSLCacheServerPort
  语   法:SSLCacheServerPort port│filename
  应用环境:server config ,virtual host
  该指令为全程的SSL会话缓存服务器处理过程配置TCP/IP端口或UNIX domain socket
  5.SSLCacheServerPort
  语   法:SSLCacheServerPath filename
  应用环境:server config ,virtual host
  该指令为全程的SSL会话缓存服务器的执行指令设置路径.如果你已经使用APACI配置脚本将Apache安装好了,那么缓存执行指令的文件就保存在Apache安装目录的sbin子目录中
  6.SSLCertificateFile
  语   法:SSLCertificateFile certificate_filename
  应用环境:server config ,virtual host
  该指令为一个WEB站点上的主机指定证书文件名.如果为某个虚拟主机提供SSL连通性,就需要为该虚拟主机指定一个单独的证书.
  7.SSLCertificateKeyFile
  语   法:SSLCertificateFile certificate_key_filename
  应用环境:server config ,virtual host
  该指令为证书指定一个对应的私钥文件
  8 SSLEnable
  语   法:SSLEnable
  应用环境:server config ,virtual host
  该指令用来启动SSL,该指令的使用无需参数
  9 SSLDisable
  语   法:SSLDisable
  应用环境:server config ,virtual host
  该指令用来禁止SSL,该指令的使用无需参数
  10 SSLFakeBasicAuth
  语   法:SSLFakeBasicAuth
  应用环境:server config ,virtual host
  该指令主要将用户的X509证书翻译成一个用户名,转换的用户名可用于验证
  11 SSLRequireCipher
  语   法:SSLRequireCipher
  应用环境:pre-directory config(.htaccess)
  该指令为请求密码的pre-directory列表添加一个cipher.
  12 SSLogFile
  语   法:SSLogFile log_filename
  应用环境:server config ,virtual host
  该指令使得SSL连接信息写入日志文件中.
  13 SSLRequireSSL
  语   法:SSLRequireSSL
  应用环境:pre-directory config file ,directory
  对于一个未使用的SSL连接,该命令能够禁用该连接,该指令的使用无需参数
  14 SSLRequiredCiphers
  语   法:SSLRequiredCiphers cipher1:cipher2:...
  应用环境:server config ,virtual host,pre-directory config(.htaccess)
  该指令指定一系列由冒号分隔的密码
  15 SSLSessionCacheTimeout
  语   法:SSLSessionCacheTimeout seconds
  应用环境:server config ,virtual host
  该指令为SSL会话设置缓存过期时间
  16 SSLVerifyDepth
  语   法:SSLVerifyDepth number
  应用环境:server config ,virtual host
  因为一个CA证书能够被另一个CA证书验证,所以可以形成一个CA证书链.使用该指令可指定服务器验证用户证书时可以查找多少个CA证明.
  17 SSLVerifyClient
  语   法:SSLVerifyClient numeric-option
  应用环境:server config ,virtual host
  该指令可以用来决定服务器是否需要用户证书.如果不需要用户证书,将该指令设为0,如果需要用户证书,将该指令设为2;如果用户证书需要与否可选择,则设置为1.
  THE END------------------------------------------------
  我想要是按照上面的步骤应该可以的,要是出错了,呵呵,那我也不知道哪里错了,我的建议是把他们三个全删了,从第二步开始重新来.当然apache功能强大,我刚刚学,先写到这吧.
本文的更多讨论在http://www.infosecurity.org.cn/forum/read.php?fid=10&tid=31&page=1


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-640379-1-1.html 上篇帖子: Cannot load /usr/local/apache2/modules/libphp5.so-Richard Shen运维/架构 下篇帖子: 多IP多端口apache虚拟主机的配置的设置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表