[证书服务器 第二篇] 基于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协议写成的服务端与客户端,各司其职,不管对方是否接收到信息, ...
随机推荐
- jersey上传文件解决办法
这两天在使用jersey 构建的jersey JAX-RS REST服务器,在通过POST方法上传文件的时候,如果根据example来操作的话会引发如下异常: SEVERE: Missing depe ...
- mysql之字符串操作
写在前面 上篇文章学习了mysql常用的日期操作的函数,这篇文章将学习mysql的字符串操作的函数. 系列文章 mysql之创建数据库,创建数据表 mysql之select,insert,delete ...
- Copy Records From One Data Block To Another Data Block In Oracle Forms
In this tutorial you will learn to copy the records from one data block to another data block on sam ...
- C#面试基础题1
1.简述 private. protected. public. internal 修饰符的访问权限.(C++中没有internal) private : 私有成员, 在类的内部才可以访问 ,也就是类 ...
- 【转载】C++11的简单学习
首先在我们的开发机以及线上机器一般都安装了C++11,目录在: /opt/compiler/gcc-4.8.2/ 看了下面这篇文章<[C++11]30分钟了解C++11新特性> http: ...
- zookeeper客户端 和服务器连接时版本问题
在使用kafka 和zookeeper 实现实时分析程序时,由于zookeeper部署版本和分析程序导入jar包的版本不一致,导致了当实时分析程序从远程服务器连接kafka集群的zookeeper时报 ...
- 14. Spring Boot定时任务的使用【从零开始学Spring Boot】
com.kfit.base.scheduling.SchedulingConfig: package com.kfit.base.scheduling; import org.springframew ...
- UNP学习笔记(第二十五章 信号驱动式I/O)
信号驱动式I/O是指进程预先告知内核,使得当某个描述符发生某事时,内核使用信号通知相关进程. 套接字的信号驱动式I/O 针对一个套接字使用信号驱动式I/O(SIGIO)要求进程执行以下3个步骤: 1. ...
- JAVA学习第十四课(接口:implements及其基本应用)
接口: 我们知道抽象类中能够定义抽象方法,也能够定义非抽象方法.当一个抽象类中的方法都是抽象方法的时候,我们就能够定义还有一种表现方式:接口(interface),所以接口是一种特殊的抽象类 接口的出 ...
- Sahi ---实现 Web 自动化测试
参考网址:http://sahipro.com/docs/sahi-apis/index.html Sahi 是 Tyto Software 旗下的一个基于业务的开源 Web 应用自动化测试工具.Sa ...