openssl证书申请_第1页
openssl证书申请_第2页
openssl证书申请_第3页
openssl证书申请_第4页
openssl证书申请_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精品文档 1欢迎下载 1 根证书的申请 准准备备根根证证书书 准备一些空目录和文件 作用如下 certs 保存颁发的所有证书的副本 index txt 跟踪已颁发的证书 初始为空 f openssl 和根证书的配置文件 private CA 证书的私钥 serial 最后一次颁发的证书的序列号 初始值 01 也可以是 00 等其它值 f内容如下 我一气儿弄了 10 年的有效期 ca default ca FwolfCA FwolfCA dir big2 tools ca certificate dir cacert pem database dir index txt new certs dir dir certs private key dir private cakey pem serial dir serial default crl days 7 default days 3650 default md sha1 精品文档 2欢迎下载 policy FwolfCA policy x509 extensions certificate extensions FwolfCA policy commonName supplied stateOrProvinceName supplied stateOrProvinceName supplied countryName supplied emailAddress supplied organizationName supplied organizationalUnitName optional certificate extensions basicConstraints CA false 下面是根证书的配置信息 req default bits 4096 default keyfile big2 tools ca private cakey pem default md sha1 prompt no distinguished name root ca distinguished name x509 extensions root ca extensions root ca distinguished name 精品文档 3欢迎下载 commonName Fwolf CA stateOrProvinceName The Earth countryName 只能是两位字母 countryName CN emailAddress one mail of fwolf organizationName Root Certification Authority organizationName Fwolf CA Root root ca extensions basicConstraints CA true 然后生成根证书 openssl req x509 newkey rsa 4096 out cacert pem outform PEM days 3650 config f 会提示输入密码以及确认密码 生成好以后可以验证一下 说是验证 其实就是看看内容 openssl x509 in cacert pem text noout 给给自自己己颁颁发发证证书书 openssl req newkey rsa 4096 keyout key pem keyform PEM out req pem outform PEM sha1 按提示输入两次密码 然后输入几项证书信息 注意其中organizationName必须输入 并且 Common Name要和域名一致 比如 Common Name eg YOUR name 就生成了私钥 key 文件和请求 req 文件 然后把 req 文件提交给 CA 根证书签署 盖章 精品文档 4欢迎下载 openssl ca in req pem config f 输入根证书的密码 就会在certs 目录下生成 pem证书文件 文件名以serial中的序号开头 信 息会存储在index txt中 这样生成的证书 在 apache 中配置需要两条语句 分别指定证书和私钥 SSLEngine On SSLCertificateFile big2 tools ca certs cert pem SSLCertificateKeyFile big2 tools ca certs key pem 其实这两个文件是可以合并为一个文件的 cat key pem cert pem pem 然后在配置 apache 的时候就只需要一句了 SSLEngine On SSLCertificateFile big2 tools ca certs pem 其其它它 去去掉掉证证书书的的口口令令 现在证书基本上就可以使用了 再返回来说一个问题 就是在启动 apache 的时候会提示输入私钥的口令 要想去掉这个 一般都不会喜欢这样的 就要求在生成私钥的时候不要设置口令 openssl req newkey rsa 4096 keyout key pem keyform PEM out req pem outform PEM sha1 nodes 生成根证书的时候还是建议带上个口令 提高安全性 精品文档 5欢迎下载 i in nd de ex x t tx xt t 另外 如果要清空index txt的话 一定要清空到字节 0 里面有一个字节都会导致openssl ca 错误 wrong number of fields on line 1 looking for field 6 got 1 left 证证书书吊吊销销 openssl ca revoke cert pem 生成 CRL 列表 openssl ca gencrl out exampleca crl 查看 CRL 列表信息 openssl crl in exampleca crl text noout 验证 CRL 列表签名信息 openssl crl in exampleca crl noout CAfile cacert pem 可以看到 CRL 的版本号为 1 这是 OpenSSL 默认的 除非 crl extensions 被指定在 配置文件 ca 一节中 上上传传到到M MT T主主机机上上应应用用 首先在Server Certificates 中Add New Certificate 填上Add New Certificate 自己起 然后选下面的Private key私钥文件和Certificate证书文件上 传 就存到服务器上了 然后返回证书列表 选中新上传证书前面的复选框 点上面的链接Make default for Web sites设置为网站默认证书 也可以通过Secure control panel将其设置为控制面板所使用的 证书 还没完 证书还得加到 ip 上才能生效 Server IP Addresses 中修改 ip 地址属性 在SSL Certificate中选择刚才上传的证书 保存 就立刻生效了 基于 ssl https 协议的特性 一个 ip 上只能使用一个证书 所以合租用户是无法自己上传或者选择其它 证书的 不过我现在使用的证书是签给 的 也就是所有域名都可以使用 好看 一点 让我不理解的 是 如果在访问一个域名时同意了这个证书 在访问另外一个域名的时候还得再同意一遍 也就是证书和 域名是要配套使用的 和我原先的想法不太一致 精品文档 6欢迎下载 4 密钥和证书管理 密钥和证书管理是 PKI 的一个重要组成部分 OpenSSL 为之提供了丰富的功能 支持多种 标准 首先 OpenSSL 实现了 ASN 1 的证书和密钥相关标准 提供了对证书 公钥 私钥 证书 请求以及 CRL 等数据对象的 DER PEM 和 BASE64 的编解码功能 OpenSSL 提供了产生各种 公开密钥对和对称密钥的方法 函数和应用程序 同时提供了对公钥和私钥的 DER 编解码 功能 并实现了私钥的 PKCS 12 和 PKCS 8 的编解码功能 OpenSSL 在标准中提供了对私钥 的加密保护功能 使得密钥可以安全地进行存储和分发 在此基础上 OpenSSL 实现了对证书的 X 509 标准编解码 PKCS 12 格式的编解码以及 PKCS 7 的编解码功能 并提供了一种文本数据库 支持证书的管理功能 包括证书密钥产 生 请求产生 证书签发 吊销和验证等功能 事实上 OpenSSL 提供的 CA 应用程序就是一个小型的证书管理中心 CA 实现了证书签 发的整个流程和证书管理的大部分机制 下面说说俺在实际应用中证书的生成 1 初始化 CA OPENSSL req x509 config 此处写配置文件的路径和名称 extensions 此处为配置文件的根证书扩展配置 newkey rsa 此处为编码大小 keyout 此处为输出密 钥的文件名称 out 此处为输出根证书名称 passout pass 此处为根证书密码 days 此 处为有效期 为天数 当执行完此命令 便生成了根证书的私钥和根证书 2 建立服务器证书 精品文档 7欢迎下载 建立请求 OPENSSL req new newkey rsa 此处为编码大小 keyout 输出密钥 out 输 出请求 config 配置文件 days 有效期 nodes 输出密钥和请求为同一文件 建立 newcert OPENSSL ca config 配置文件 policy 配置文件中的段 days 有效期 out newcert pem 文件 passin pass CA 密钥 batch extensions 配置文件中的段 infiles 请求文件 建立 PKCS12 格式证书 RANDFILE random 文件路径 OPENSSL pkcs12 export in newcert pem 路径 inkey 请求的密钥文件 certfile CA 证书文件 caname CA 名称 out 输出的 pfx 文件 clcerts name commonname passout pass RANDFILE random 文件路径 OPENSSL pkcs12 in pfx 文件 out 输出的 pem 证书文件 passin pass passout pass 建立 DER 格式证书 OPENSSL x509 in 以上建立的 pem 证书文件 out der 证书文件 inform PEM outform DER 3 建立用户证书 建立请求 OPENSSL req new newkey rsa 此处为密钥大小 keyout 输出用户私钥文件 out 输出用户请求 config 配置文件 days 有效期 天 nodes 建立证书 OPENSSL ca config 配置文件 in 请求文件 out dev null notext days 有效期 passin pass CA 密码 batch extensions 配置文件中的段 建立 der 格式证书 OPENSSL x509 in 用户证书 上一步生成的证书 在配置文件中指 定了 out 输出 der 证书 inform PEM outform DER 建立 pfx 格式证书 RANDFILE random 文件路径 OPENSSL pkcs12 export in 用户证书 inkey 用户密钥 certfile CApem 证书文件 caname CA 组织名称 out 输出 pfx 文件 name commonname passout pass 以上为我在应用中使用到的命令 提供出来供大家参考 服务器证书与用户证书为平级关系 只是配置文件不同 配置证书的配置文件在网上很多 这里就不赘述 openssl 的一些参数 openssl dhparam inform DER PEM outform DER PEM in filename out filename dsaparam noout text C 2 5 rand file s numbits inform DER PEM 指定输入的格式是 DEM 还是 DER DER 格式采用 ASN1 的 DER 标准格式 一般用的多的 都是 PEM 格式 就是 base64 编码格式 你去看看你做出来的那些 key crt 文件一般都是 PEM 格式的 第一行和最后一行指明内容 中间就是经过编码的东西 outform DER PEM 和上一个差不多 不同的是指定输出格式 in filename 精品文档 8欢迎下载 要分析的文件名称 out filename 要输出的文件名 dsaparam 如果本 option 被 set 那么无论输入还是输入都会当做 DSA 的参数 它们再被转化 成 DH 的参数格式 这样子产生 DH 参数和 DH key 都会块很多 会使 SSL 握手的时间缩短 当然时间是以安全性做牺牲的 所以如果这样子最好每次使用不同的参数 以免给人 K 破 你的 key 2 5 使用哪个版本的 DH 参数产生器 版本 2 是缺省的 如果这俩个 option 有一个被 set 那么将忽略输入文件 rand file s 产生 key 的时候用过 seed 的文件 可以把多个文件用冒号分开一起做 seed numbits 指明产生的参数的长度 必须是本指令的最后一个参数 如果没有指明 则产生 512bit 长的参数 noout 不打印参数编码的版本信息 text 将 DH 参数以可读方式打印出来 C 将参数转换成 C 代码方式 这样可以用 get dhnumbits 函数调用这些参数 openssl 还有俩个指令 dh gendh 现在都过时了 全部功能由 dhparam 实现 现在 dh gendh 这俩个指令还保留 但在将来可能会用做其他用途 精品文档 9欢迎下载 本文将介绍如何利用 Tomcat 的 HTTPS 功能 和一个自己创建的 CA 来构建 WEB 服务器证书和个人数字证 书 最终建成一个 HTTPS 双向认证环境 可以用于测试目的 本文构建 HTTPS 双向认证的业务流程大致 如下 1 1 创建创建 WEBWEB 服务器公钥密钥 并生成服务器证书请求 服务器公钥密钥 并生成服务器证书请求 2 2 利用自建的利用自建的 CACA 根据服务器证书请求为服务器签发服务器证书 然后把服务器证书导回 根据服务器证书请求为服务器签发服务器证书 然后把服务器证书导回 WEBWEB 服务器中 服务器中 3 3 利用利用 opensslopenssl 生成客户端 生成客户端 IEIE 使用的个人数字证书 也由同样的 使用的个人数字证书 也由同样的 CACA 签发个人证书 签发个人证书 4 4 将个人数字证书 将个人数字证书 PKCS12PKCS12 格式 包含密钥 导入到浏览器 格式 包含密钥 导入到浏览器 IE FirefoxIE Firefox 后 就可以进行 后 就可以进行 HTTPSHTTPS 测试测试 了 了 一一 选择选择 HTTPSHTTPS WEBWEB 服务器服务器 这里我们选择了 Tomcat 当然还有其它方法 如 Apache Tomcat 让 Apache 配置成 HTTPS 模式 而 Tomcat 只做 HTTP 业务处理 这样有利于提高性能 但本文只建造一个简单的 HTTPS 测试环境 只用 Tomcat 自带的 HTTPS 功能 当然 我以后会考虑研究一下 Apache Tomcat 模式 到时再和大家一起分 享经验 二二 创建一个自己的创建一个自己的 CACA 创建一个自己的 CA 来模拟 HTTPS 构建环境 利用 CA 签发证书 不仅有利于了解 PKI 概念 而且有利于 了解真正应用的业务流程 关于如何创建一个简单的测试用 CA 我已在本博客发文 题目为 利用 openssl 创建一个简单的 CA 请参考 这里就不再重述了 另外 如果你真的觉得建一个 CA 比较麻烦 且只使用几个个人数字证书的话 当然也可以不建 CA 下面 章节也会提到不用 CA 如何构建双向认证 三三 创建服务器公钥密钥及颁发服务器证书创建服务器公钥密钥及颁发服务器证书 实际上有两种方法生成服务器证书 一种是用 JDK 带的 keytool 另一种是用 openssl 命令生成 pkcs12 格式的证书 个人更喜欢第二种 因为用 openssl 生成的 pkcs12 格式服务器证书可以导出明文的服务器 密钥 便于用 wireshark ethereal 的新名字 查看 HTTPS 里被加密过的 HTTP 消息 keytool 生成的 keystore 也有办法导出密钥 但还要编程去弄 太麻烦了 方法一 用 keytool 创建服务器公钥密钥并用 CA 签发服务器证书 keytool 是 JDK 自带的工具程序 确保 keytool 已在 PATH 路径里 或在以下命令里指明 keytool 的全路 径 如 JAVA HOME bin keytool 精品文档 10欢迎下载 1 1 用用 keytoolkeytool 生成服务器公钥密钥生成服务器公钥密钥 在 TOMCAT 的 conf 目录里执行以下命令 假设 conf 目录路径为 TOMCAT HOME conf keytool keystore tomcat jks keypass 222222 storepass 222222 alias tomcat genkey keyalg RSA dname CN servername OU servers O ABCom 注 其中 DN 证书的唯一取别名 里的 CN 最好是服务器的域名地址或 IP 地址 因为浏览器在发现服务 器证书的 CN 与访问服务器的域名或 IP 不符时 会报一个警告 不过这个问题不大 2 2 生成服务器证书请求 并让测试生成服务器证书请求 并让测试 CACA 签发服务器证书签发服务器证书 实际上本步骤也可以省略 唯一不好的结果是用户在开始访问服务器 HTTPS 服务时 会跳一个窗口警告用 户 用户可以在该窗口里看到服务器证书是一个自签名的证书 用服务器私钥自己给自己签发的证书 keytool 生成公钥密钥时自动生成这种证书 但只要用户选择 信任该证书 也照样可以与服务器建立 HTTPS 连接 但正规的 HTTPS 服务器 还是应该申请一个服务器证书比较好 2 12 1 生成服务器证书请求 生成服务器证书请求 keytool keystore tomcat jks keypass 222222 storepass 222222 alias tomcat certreq file serverreq pem 以下命令可以查看一下证书请求的内容 openssl req in serverreq pem text noout 2 22 2 用测试用测试 CACA 签署服务器证书 签署服务器证书 把 serverreq pem 拷贝到 CA 的某目录下 我们就可以按照 利用 openssl 创建一个简单的 CA 里的 CA 的日常操作 的 1 根据证书申请请求签发证书 章节进行证书签发了 openssl ca in serverreq pem out servercert pem config HOME testca conf testca conf 执行过程中需要输入 CA 私钥的保护密码 2 32 3 把服务器证书导回到服务器的把服务器证书导回到服务器的 keystorekeystore 里 里 前面命令里生成的 servercert pem 即为服务器证书 从 CA 处把该文件及 CA 的证书 HOME testca cacert pem 拿来 一起放到 Tomcat 的 conf 目录里 另外导入前 还有一个工作需要做 需要手工编辑 servercert pem 证书文件 把 BEGIN CERTIFICATE 该行前的所有内容都删掉 因为 keytool 不认得这些说明性的内容 导入前也可以执行命令查看一下证书内容 keytool printcert file servercert pem 精品文档 11欢迎下载 导入服务器证书 先导入 CA 的证书 keytool keystore tomcat jks keypass 222222 storepass 222222 alias ca import trustcacerts file cacert pem 再导入服务器证书 keytool keystore tomcat jks keypass 222222 storepass 222222 alias tomcat import file servercert pem 导入后可以用以下命令查看一下 keystore 里的内容 keytool keystore tomcat jks keypass 222222 storepass 222222 list v 3 3 创建服务器信任的客户端创建服务器信任的客户端 CACA 证书库 证书库 用 keytool 创建一个证书库 里面存放服务器信任的 CA 证书 也就是只有这些 CA 签发的客户端个人证书 才被服务器信任 才能通过 HTTPS 访问服务器 这就是 HTTPS 服务器验证客户端证书 的关键配置 注 如果只是测试目的 为了简单期间 也可以直接把客户端未经 CA 签发的自签名证书直接导入信任证书库 里 这里 我们假设客户端个人证书 后续章节介绍如何生成客户端个人证书 也是由测试 CA 签发的 所以 我们要把 cacert pem 证书导入信任证书库 keytool keystore truststore jks keypass 222222 storepass 222222 alias ca import trustcacerts file cacert pem 可以用以下命令查看信任证书库内容 keytool keystore truststore jks keypass 222222 storepass 222222 list v 4 4 配置配置 TomcatTomcat 支持支持 HTTPSHTTPS 双向认证 服务器将认证客户端证书 双向认证 服务器将认证客户端证书 修改 tomcat 的 conf 目录里的 server xml 文件 TOMCAT HOME conf server xml 找到类似下面内容 的配置处 添加配置如下 题外话 其实 HTTPSHTTPS 单向和双向认证配置的唯一区别是 把单向和双向认证配置的唯一区别是 把 clientAuthclientAuth 改为改为 falsefalse 去掉 去掉 truststoretruststore 的相关配置 就是单向的相关配置 就是单向 HTTPSHTTPS 认证了认证了 单向 HTTPS 用的可能更多 它主要在浏览器与 f 服务器交互的 HTTP 需要加密 而不需要验证客户端证书时使用 经以上配置后 重启 tomcat 服务器就支持 HTTPS 双向认证了 方法二 用 openssl 创建服务器公钥密钥并用 CA 签发服务器证书 前面已经提到过 这种方式的好处是有利于抓包查看服务器与浏览器 HTTPS 交互里的 HTTP 信息 其实 这种方法与 利用 openssl 创建一个简单的 CA 里提到的制作个人数字证书方法很类似 请参考 利用 openssl 创建一个简单的 CA 的 三 自己生成公钥密钥 并用测试 CA 签发数字证书 章节 1 1 制作服务器证书 制作服务器证书 最终形成一个 pkcs12 文件 包含服务器密钥 证书和 CA 的证书 假设我们把服务器相关的东西生成到 CA 的 HOME testca test server 目录里 mkdir p HOME testca test server cd HOME testca test server 2 12 1 创建服务器公钥密钥 并同时生成一个服务器证书请求 创建服务器公钥密钥 并同时生成一个服务器证书请求 openssl req newkey rsa 1024 keyout serverkey pem keyform PEM out serverreq pem outform PEM subj O ABCom OU servers CN servername 执行命令过程中输入密钥保护密码 222222 执行后可以用以下命令查看请求内容 openssl req in serverreq pem text noout 2 22 2 用测试用测试 CACA 签署服务器证书 签署服务器证书 把 serverreq pem 拷贝到 CA 的某目录下 我们就可以按照 利用 openssl 创建一个简单的 CA 里的 CA 的日常操作 的 1 根据证书申请请求签发证书 章节进行证书签发了 openssl ca in serverreq pem out servercert pem config HOME testca conf testca conf 执行过程中需要输入 CA 私钥的保护密码 精品文档 13欢迎下载 执行完后可以用以下命令查看证书内容 openssl x509 in servercert pem text noout 导入信任的导入信任的 CACA 根证书到根证书到 JavaJava 的默认位置的默认位置 keytool import v trustcacerts storepass changeit alias root aisce file c root ca cert pem keystore JAVA HOME jre lib security cacerts 2 32 3 制作服务器制作服务器 pkcs12pkcs12 文件 包含服务器密钥 证书和文件 包含服务器密钥 证书和 CACA 的证书 的证书 openssl pkcs12 export in servercert pem inkey serverkey pem out tomcat p12 name tomcat CAfile HOME testca cacert pem caname root chain 执行过程中要输入服务器密钥的保护密码 serverkey pem 和新生成的 tomcat p12 的保护密码 我们都 输入 222222 创建完成后 把 pkcs12 文件拷贝到 tomcat 的 conf 目录下 3 3 创建服务器信任的客户端创建服务器信任的客户端 CACA 证书库证书库 同方法一的对应章节 这里 我们假设客户端个人证书 后续章节介绍如何生成客户端个人证书 也是由 测试 CA 签发的 所以我们要把 cacert pem 证书导入信任证书库 keytool keystore truststore jks keypass 222222 storepass 222222 alias ca import trustcacerts file cacert pem 可以用以下命令查看信任证书库内容 keytool keystore truststore jks keypass 222222 storepass 222222 list v 4 4 配置配置 TomcatTomcat 支持支持 HTTPSHTTPS 双向认证 服务器将认证客户端证书 双向认证 服务器将认证客户端证书 修改 tomcat 的 conf 目录里的 server xml 文件 TOMCAT HOME conf server xml 找到类似下面内容 的配置处 添加配置如下 注意 其中 keystore 的 keystoreType 与方法一的配置不同 经以上配置后 重启 tomcat 服务器就支 持 HTTPS 双向认证了 精品文档 14欢迎下载 四四 创建用于客户端 浏览器 测试的个人数字证书 创建用于客户端 浏览器 测试的个人数字证书 pkcs12pkcs12 格式 格式 完全按照 利用 openssl 创建一个简单的 CA 里提到的制作个人数字证书方法来进行 请参考 利用 openssl 创建一个简单的 CA 的 三 自己生成公钥密钥 并用测试 CA 签发数字证书 章节 1 1 创建个人密钥和证书请求 证书请求里包含了公钥 创建个人密钥和证书请求 证书请求里包含了公钥 创建 HOME testuser1 目录并执行命令 证书等都放到这个目录 mkdir HOME testuser1 cd HOME testuser1 openssl req newkey rsa 1024 keyout testkey pem keyform PEM out testreq pem outform PEM subj O TestCom OU TestOU CN testuser1 执行过程中需要输入私钥的保护密码 假设我们输入密码 222222 执行完后 testkey pem 即为用户的密钥 而 testreq pem 即为证书请求 可以用 openssl req in testreq pem text noout 查看证书请求的内容 2 2 用用 CACA 为为 testuser1testuser1 签发个人证书签发个人证书 同样还在 HOME testuser1 目录下执行命令 openssl ca in testreq pem out testcert pem config HOME testca conf testca conf 执行过程中需要输入 CA 的密钥保护密码 刚才设置的 888888 并且最后询问你是否要给该用户签发证 书时要选 y 执行完后 testcert pem 即为证书 可以用命令 openssl x509 in testcert pem text noout 查看证书内容 3 3 制作制作 PKCS12PKCS12 文件 个人数字证书 文件 个人数字证书 我们制作的这个 PKCS 12 文件将包含密钥 证书和颁发该证书的 CA 证书 把前几步生成的密钥和证书制作成一个 pkcs12 文件的方法执行命令 openssl pkcs12 export in testcert pem inkey testkey pem out testuser1 p12 name testuser1 chain CAfile HO

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论