[证书服务器 第二篇] 基于OpenSSL 在 CentOS6 系统上 搭建自签证书服务,并应用于Web容器
第一部分:概述
。。
第二部分:环境准备
1 操作系统
CentOS 6.x
2 安装openssl
yum install -y openssl
3 安装jdk
从官网下载JDK http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
mkdir -p /opt/jtools
此处下载的是 jdk-8u161-linux-x64.tar.gz 上传到CentOS6中,解压到/opt/jtools/java/目录下
[root@iZ2ze2pbmzw561v3fj8o3wZ jdk1.8.0_161]# pwd/opt/jtools/java/jdk1.8.0_161[root@iZ2ze2pbmzw561v3fj8o3wZ jdk1.8.0_161]# lsbin include lib README.html THIRDPARTYLICENSEREADME-JAVAFX.txtCOPYRIGHT javafx-src.zip LICENSE release THIRDPARTYLICENSEREADME.txtdb jre man src.zip[root@iZ2ze2pbmzw561v3fj8o3wZ jdk1.8.0_161]#
配置环境变量
vim ~/.bash_profile
在文件中增加如下内容
#JAVA_HOME
export JAVA_HOME=/opt/jtools/java/jdk1.8.0_161export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
保存后,使环境变量生效
source ~/.bash_profile
查看Java版本
[root@iZ2ze2pbmzw561v3fj8o3wZ jdk1.8.0_161]# java -version
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)
[root@iZ2ze2pbmzw561v3fj8o3wZ jdk1.8.0_161]#
第三部分:证书服务设计与部署
一、证书服务目录结构设计
证书服务部署时,需指定Openssl工作目录,初始脚本会自动创建相关文件夹和文件,并生成根证书。
二、 将相关脚本及配置文件,上传到服务器/opt/shdir目录下
initCaHome.sh -- 证书服务初始化脚本
addServer.sh -- 新增应用初始化脚本
generateServerCert.sh / generateServerCertForIIS.sh -- 签发指定应用服务端证书
addClientCert.sh -- 签发指定应用客户端证书
openssl.cnf -- 配置文件(包含默认配置,可根据需要修改)
为脚本配置执行权限
chmod +x /opt/shdir/*.sh
三、 执行证书服务初始化命令
/opt/shdir/initCaHome.sh /opt/ca_ws
$1 为指定的证书工作目录
此脚本执行后,会生成如下目录和文件:
/opt/ca_ws
/opt/ca_ws/rootca
/opt/ca_ws/rootca/private
/opt/ca_ws/rootca/private/ca.key
/opt/ca_ws/rootca/cert
/opt/ca_ws/rootca/cert/ca.crt
/opt/ca_ws/apps
/opt/ca_ws/conf
/opt/ca_ws/conf/openssl.cnf
/opt/ca_ws/conf/index.txt
/opt/ca_ws/conf/serial
第四部分:IIS服务应用
一、生成IIS服务器证书申请
此处使用一台Window server 2008 R2 的机器作为测试机,添加Web服务器角色后,
进入服务器管理器,找到 Internet 信息服务(IIS)管理器,点击右侧起始页下的节点
右侧点击进入服务器证书,右侧操作栏点击创建证书申请
申请证书,输入如下内容(根据需要填写),示例如下:
通用名称:www.spads.cn
组织:spads
组织单位:spads
城市/地点:Beijing
省/市/自治区:Beijing
国家/地区:CN
点击下一步
加密服务提供程序属性,默认,点击下一步
为证书申请一个文件名,选择本地磁盘一个路径(E:\server_req.txt),点击完成。
此时得到一个IIS证书申请文件E:\server_req.txt。
注:server_req.txt 为默认文件名,不可更改(之后的脚本已应用)。
注:检查证书服务配置文件要求,证书之间需保持一致的信息项如下:
[ policy_match ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
name = optional
emailAddress = optional
可调整配置文件 match 更改为optional。
二、签发服务端证书和客户端证书。
1 证书服务器上,执行脚本,初始应用证书目录。
/opt/shdir/addServer.sh /opt/ca_ws testIIS
$1 为指定的证书工作目录
$2 为应用名称
此脚本执行后,会生成如下目录
/opt/ca_ws/apps/testIIS
/opt/ca_ws/apps/testIIS/server
/opt/ca_ws/apps/testIIS/server/private
/opt/ca_ws/apps/testIIS/server/cert_req
/opt/ca_ws/apps/testIIS/server/cert
/opt/ca_ws/apps/testIIS/client
/opt/ca_ws/apps/testIIS/client/private
/opt/ca_ws/apps/testIIS/client/cert_req
/opt/ca_ws/apps/testIIS/client/cert
2 上传IIS证书请求文件
将IIS证书申请文件(server_req.txt),上传到/opt/ca_ws/apps/testIIS/server/cert_req 目录下
3 执行命令,签发服务端证书
/opt/shdir/generateServerCertForIIS.sh /opt/ca_ws testIIS
$1 为指定的证书工作目录
$2 为应用名称
此脚本执行后,会生成如下文件
/opt/ca_ws/apps/testIIS/server/key/server.key
/opt/ca_ws/apps/testIIS/server/cert/server.pem
此时可得到签发出的IIS服务端证书为 /opt/ca_ws/apps/testIIS/server/cert/server.pem
注:此脚本执行过程中,会提示是否签名以及是否提交,均需输入y
4 执行命令,签发客户端证书
/opt/shdir/addClientCert.sh /opt/ca_ws/ testIIS 3
$1 为指定的证书工作目录
$2 为应用名称
$3 为客户端编号
此脚本执行后,会生成如下文件:
/opt/ca_ws/apps/testIIS/client/key/client3.key
/opt/ca_ws/apps/testIIS/client/cert_req/client3.csr
/opt/ca_ws/apps/testIIS/client/cert/client3.crt
/opt/ca_ws/apps/testIIS/client/key/client3.p12(含私钥,可以导入IE浏览器)
注:此脚本执行过程中,会提示是否签名以及是否提交,均需输入y,同时会导出带有私钥的客户端证书,会提示定义输出密码。
注:脚本中使用默认的CN信息生成规则,如果需要使用CN变量绑定登录用户名称,可以动态修改或者将此信息更改为变量。
三、IIS 应用证书开启HTTPS双向认证
1 从证书服务器下载根证书、签发的服务端证书和客户端证书
/opt/ca_ws/rootca/cert/ca.crt
/opt/ca_ws/apps/testIIS/server/cert/server.pem
/opt/ca_ws/apps/testIIS/client/cert/client3.p12
2 安装根证书导入到IIS服务器
拷贝根证书(ca.crt),和服务器证书(server.pem)到IIS所在服务器,双击根证书(ca.crt),导入到受信任的根证书颁发机构/本地计算机(需勾选显示物理存储) 目录中
3 导入服务器证书
打开Internet 信息服务(IIS)管理器,点击右侧起始页下的节点
右侧点击进入服务器证书,右侧操作栏点击 【完成证书申请】,指定server.pem。完成服务器证书导入。
注:导入后,可双击打开列表中的证书,选择复制到文件,可以导出带私钥的服务器证书。
注:手工记录证书序列号,如果刷新列表,安装的证书消失,需要进入命令行修复证书(certutil -repairstore my 证书序列号)。
4 网站配置启用SSL
检查网站是否已经绑定了HTTPS,如果存在,删除。
增加绑定https,选择刚刚导入的服务器证书。
从功能窗口点击进入SSL配置,勾选必须,开启双向认证(客户端提供证书)。
5 客户端验证
拷贝根证书(ca.crt) 和客户端证书(client6.p12)到客户端机器上尝试。
未安装客户端证书,访问被限制
安装客户端证书,可以访问。
注:客户端安装: 双击客户端证书(client6.p12),导入到个人目录中。同时需在IE浏览器选项中,找到内容——点击清空SSL状态,并重启浏览器。
注:需要安装根证书,可正常访问到服务。
注:windows server 2008 R2 本机对证书有特殊限制(要求域名访问),所以需要在外部机器(Window7/10)进行测试
第五部分、Tomcat 服务应用
一、签发服务端证书和客户端证书
1 证书服务器上,执行脚本,初始应用证书目录。
/opt/shdir/addServer.sh /opt/ca_ws testTomcat
$1 为指定的证书工作目录
$2 为应用名称
2 签发服务器证书
$1 为指定的证书工作目录
$2 为应用名称
$3 为客户端编号
注:此处会导出带有私钥的客户端证书,会提示定义输出密码。
此时得到
服务端证书为 /opt/ca_ws/apps/testTomcat/server/cert/server.crt
证书私钥为 /opt/ca_ws/apps/testTomcat/server/private/server.key
3 签发客户端证书
/opt/shdir/addClientCert.sh /opt/ca_ws/ testTomcat 3
$1 为指定的证书工作目录
$2 为应用名称
$3 为客户端编号
注:此处会导出带有私钥的客户端证书,会提示定义输出密码。
4 导出Tomcat配置所需项
获取信任密钥库
keytool -import -file $1 -alias firstCA -keystore $2
$1 根证书路径 /opt/ca_ws/rootca/cert/ca.crt
$2 输出路径 /opt/ca_ws/apps/testTomcat/server/cert/myTrustStore
获取服务端证书
openssl pkcs12 -export -in $1 -inkey $2 -certfile $3 -out $4
$1 服务端证书路径 /opt/ca_ws/apps/testTomcat/server/cert/server.crt
$2 服务端私钥路径 /opt/ca_ws/apps/testTomcat/server/private/server.key
$3 根证书路径 /opt/ca_ws/rootca/cert/ca.crt
$4 输出路径 /opt/ca_ws/apps/testTomcat/server/cert/server.p12
二、Tomcat 应用证书开启HTTPS双向认证
1 拷贝文件
下载 myTrustStore、server.p12,并拷贝 到 tomcat/conf 目录下
2 单向SSL配置(tomcat/conf/server.xml)
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="conf/server.p12" keystoreType="PKCS12" keystorePass="zzzzzz" />
3 双向SSL配置
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS" keystoreFile="conf/server.p12" keystoreType="PKCS12" keystorePass="zzzzzz" truststoreFile="conf/myTrustStore" truststoreType="JKS" truststorePass="zzzzzz"/>
三、客户端验证
未安装客户端证书,访问被限制
安装客户端证书,可以访问。
[证书服务器 第二篇] 基于OpenSSL 在 CentOS6 系统上 搭建自签证书服务,并应用于Web容器的更多相关文章
- Linux操作系统安全-局域网私有CA(Certificate Authority)证书服务器实战篇
Linux操作系统安全-局域网私有CA(Certificate Authority)证书服务器实战篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.试验架构说明 node101 ...
- 基于Hexo且在GitHub上搭建博客
title: 基于Hexo且在GitHub上搭建博客 Welcome to Fofade's Blog! 搭建初衷 大大小小,大学两年,玩了很多,也学了很多. 回首望之,曾经不知道的,现在是知道了,但 ...
- CENTOS6.6上搭建单实例ORACLE12C
本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 摘要: 自己在centos6.6上搭建的单实例oracle12c 由 ...
- 第二篇 基于.net搭建热插拔式web框架(沙箱的构建)
上周五写了一个实现原理篇,在评论中看到有朋友也遇到了我的问题,真的是有种他乡遇知己的感觉,整个系列我一定会坚持写完,并在最后把代码开源到git中.上一篇文章很多人看了以后,都表示不解,觉得不知道我到底 ...
- 解决centos6系统上python3—flask模块的安装问题
Flask 是一个使用 Python 编写的轻量级 Web 框架(所以我们前面花了那么多时间安装 Python3 呀).它被称为微型架构,因为其使用非常简单的核心以及功能丰富的扩展.虽然 Flask ...
- 使用基于 PHP 的开源软件 YOURLS 搭建短链接地址服务
使用基于 PHP 的开源软件 YOURLS搭建 系统配置 php7.1+mysql5.7+nginx 下载源代码 git clone https://github.com/YOURLS/YOURLS. ...
- Linux CentOS6.5上搭建环境遇到的问题
1.卸载CentOS自带的JDK 查看centos上 安装的jdk:rpm -qa|grep jdk 出现如下: java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86 ...
- Java系列--第二篇 基于Maven的Android开发HelloAndroidWorld
曾经写过一篇Android环境配置的随笔,个人感觉特繁琐,既然有Maven,何不尝试用用Maven呢,经网上搜索这篇文章但不限于这些,而做了一个基于Maven的Android版的Hello Andro ...
- 网络编程[第二篇]基于udp协议的套接字编程
udp协议下的套接字编程 一.udp是无链接的 不可靠的 而上篇的tcp协议是可靠的,会有反馈信息来确认信息交换的完成与否 基于udp协议写成的服务端与客户端,各司其职,不管对方是否接收到信息, ...
随机推荐
- Beginning Auto Layout Tutorial in iOS 7: Part 1
可以更好的结局屏幕方向和兼容iphone和ipad的解决方案. iOS6有一个新的技术auto layout来帮助解决这个问题.这个技术不仅可以支持app不同尺寸下的开发,而且你也不需要为每一种语言创 ...
- memcache 开机启动
一. 通常:启动Memcache的服务器端的命令为:# /usr/local/bin/memcached -d -m 10 -u root -l 127.0.0.1 -p 11211 -c 256 - ...
- Hadoop一些问题总结
1.运行mr程序出错 connecting to resoucemanager retrying .... retrying ..... 原因是没有启动yarn或者启动失败 2.初始化工作目录结构 h ...
- Mark一下, dp状态转移方程写对,可是写代码都错,poj 1651 poj 1179
dp题: 1.写状态转移方程; 2.考虑初始化边界,有意义的赋定值.还没计算的赋边界值: 3.怎么写代码自底向上计算最优值 今天做了几个基础dp,所有是dp方程写对可是初始化以及计算写错 先是poj ...
- c语言单链表实现
/************************************************************************* > File Name: singleLin ...
- Notification(二)——PendingIntent的flag导致数据同样的问题
MainActivity例如以下: package cc.cu; import android.os.Bundle; import android.view.View; import android. ...
- 有用PHP依赖管理工具Composer新手教程
PHP依赖管理工具Composer新手教程 Composer 是 PHP 的一个依赖管理工具.它同意你申明项目所依赖的代码库,它会在你的项目中为你安装他们. 依赖管理 Composer 不是一个包管理 ...
- 【SharePoint】SharePoint2013中使用客户端对象模型给用户控件赋初值
本文要实现的功能:新建一条列表记录,打开新建记录画面时,自动给[申请人]赋值为当前登录用户. 在SharePoint2010中,可以使用SPServices的SPFindPeoplePicker方法来 ...
- Docker 开源管理工具集锦
俗话说工欲善其事.必先利其器.Docker 是一种详细的虚拟化技术,Docker 尽管以RestAPI形式提供服务.但在实际生产环境中,管理大规模集群部署的Docker容器确实是一个巨大的挑战.尽管D ...
- Oracle TNS路径
修改tnsnames.oRA,监听文件 Oracle TNS路径 G:\Oracle\product\11.2.0\client_1\network\admin\tnsnames.oRA