转载请标明出处:http://blog.csdn.net/shensky711/article/details/52225073

本文出自: 【HansChen的博客】

用openssl指令逐步生成各个文件

  1. 生成服务器密钥:openssl genrsa -out server_private.key 2048
  2. 从密钥生成公钥(非必须):openssl rsa -in server_private.key -pubout > server_public.key
  3. 生成证书请求文件,这里会让你输入一堆信息,比如组织名称、个人信息等:openssl req -new -key server_private.key -out server_req.csr
  4. 初始化CA环境

    mkdir demoCA
    cd demoCA
    mkdir certs crl newcerts
    touch index.txt serial
    echo 00 > serial
    cd ..
  5. 生成ca密钥:openssl genrsa -out ca.key 2048

  6. 生成ca证书:openssl req -new -x509 -key ca.key -out ca.crt
  7. 用ca对服务器证书请求文件进行签名:openssl ca -in server_req.csr -out server.crt -cert ca.crt -keyfile ca.key -config /usr/ssl/openssl.cnf
  8. 可以把服务端的私钥和已签名的证书合并到一个pkcs12格式的文件:openssl pkcs12 -export -out server.pfx -inkey server_private.key -in server.crt
  9. 也可以把pkcs12格式转化为java常用的jks格式:keytool -importkeystore -v -srckeystore server.pfx -srcstoretype pkcs12 -srcstorepass 123456 -destkeystore server.jks -deststoretype jks -deststorepass 123456

用keytool生成

keytool主要可以帮我们:

  1. 创建一个新的JKS(Java Key Store)文件(里面包含了一个新生成的服务器密钥)
  2. 导出一个CSR(Certificate Signung Request)证书申请文件
  3. 导入一个签名后的证书文件到jks文件中

以下是操作步骤:

  1. 生成新的jks文件:keytool -genkeypair -alias server -keyalg RSA -keystore server.jks
  2. 到出证书请求文件:keytool -certreq -alias server -file server.csr -keystore server.jks
  3. 用ca对请求文件进行签名(ca的生成请参考上面):openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config demoCA/config/openssl.cnf
  4. 导入已签名的证书到jks:keytool -importcert -alias server -file server.crt -keystore server.jks

这样,我们就得到了一个包含了服务器密钥以及已签名证书的jks文件了

最终生成的文件

最终服务端需要用到的文件有:

1. 服务器私钥

2. 经过CA签名的证书(包含服务器公钥、基本信息)

客户端需要用到的文件有:

1. CA的证书(包含了CA的公钥,用以对服务器的证书解密,校验证书真伪)

有些服务器配置可以使用私钥+证书合并在一起的文件,如jks或者pkcs12文件,这类文件一般叫key.keystore。客户端使用的ca证书一般称为:truststore

遇到的问题

openssl对证书签名的时候有可能报国家、组织、地区需一致的错误,是因为在openssl.cfg中的policy_match里面的前三个都选了match,可以修改optional,修改后就可以了

利用keytool、openssl生成证书文件的更多相关文章

  1. 用OpenSSL命令行生成证书文件

    用OpenSSL命令行生成证书文件 1.首先要生成服务器端的私钥(key文件): openssl genrsa -des3 -out server.key 1024 运行时会提示输入密码,此密码用于加 ...

  2. 如何利用OpenSSL生成证书

    此文已由作者赵斌授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 一.前言 最近为了测试内容分发网络(Content Delivery Network,简称 CDN)添加的新功 ...

  3. CentOS6系统openssl生成证书和自签证书

    CentOS6系统openssl生成证书和自签证书的过程,记录一下,本文基于CentOS 6 64bit.$ yum install openssl openssl-devel 1,生成服务器端的私钥 ...

  4. 使用OpenSSL生成证书

    使用OpenSSL生成证书 下载安装openssl,进入/bin/下面,执行命令(把ssl目录下的openssl.cnf 拷贝到bin目录下)1.首先要生成服务器端的私钥(key文件):openssl ...

  5. tomcat配置https–采用JDK自带的keytool工具生成证书

    转自:http://blog.csdn.net/huangxinyu_it/article/details/41693633 有关http与https的区别请看<浅谈http与https的区别( ...

  6. 使用OpenSSL生成证书并配置Https

    1.密钥.证书请求.证书概要说明 在证书申请签发过程中,客户端涉及到密钥.证书请求.证书这几个概念.我们以申请证书的流程说明三者的关系.客户端(相对于CA)在申请证书的时候,大体上有三个步骤: 第一步 ...

  7. [转帖] ./demoCA/newcerts: No such file or directory openssl 生成证书时问题的解决.

    接上面一篇blog 发现openssl 生成server.crt 时有问题. 找了一个网站处理了一下: http://blog.sina.com.cn/s/blog_49f8dc400100tznt. ...

  8. 使用openssl生成证书,并通过Nginx配置

    创建服务器证书密钥文件 server.key openssl genrsa -des3 -out server.key 2048 这个时候会提示输入密码 这个密码要记住 openssl语法 opens ...

  9. 利用html模板生成Word文件(服务器端不需要安装Word)

    利用html模板生成Word文件(服务器端不需要安装Word) 由于管理的原因,不能在服务器上安装Office相关组件,所以只能采用客户端读取Html模板,后台对模板中标记的字段数据替换并返回给客户端 ...

随机推荐

  1. 当node版本升级到8.0以上带来的问题

    1.新增package-lock.json 2.相关babel更新 重新安装 $ npm install babel-preset-env --save-dev .babelrc文件修改 { + &q ...

  2. java中的时区转换

    目录 java中的时区转换 一.时区的说明 二.时间的表示 三.时间戳 四.Date类和时间戳 五.java中的时区转换 java中的时区转换 一.时区的说明 地球表面按经线从东到西,被划成一个个区域 ...

  3. python3openpyxl库的简单使用

    python3操作表格有很多库,现在主要给大家介绍一下我比较喜欢用的openpyxl库,安装直接pip安装,对pip安装有疑问可以参考我有关于pip使用的文章. wb=Workbook()#新建表格 ...

  4. 安装Java环境

    一.下载JDK https://www.oracle.com/technetwork/java/javase/downloads/index.html 二.exe安装 默认路径 C:\Program ...

  5. [爬虫]用python的requests模块爬取糗事百科段子

    虽然Python的标准库中 urllib2 模块已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,而 Requests 自称 “HTTP for Humans”,说明使用更 ...

  6. JavaSE语法(中)

    6.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 是值传递.Java语言的方法调用支持参数的值传递.当一个对象实例作为一个 ...

  7. m102 SE赛

    这次考试考完试正在刷提交记录的时候,到我这突然oj卡了一下,然后卡了大约10s,再刷出来就发现:

  8. javascript中判断数据类型

    编写javascript代码的时候常常要判断变量,字面量的类型,可以用typeof,instanceof,Array.isArray(),等方法,究竟哪一种最方便,最实用,最省心呢?本问探讨这个问题. ...

  9. liunx查看日志 | 最实用命令和方法

    1.业务系统访问量不是很大的时候,使用这个,有bug的地方操作下,直接看最后操作的日志 tail  -fn100  catalina.log   查询日志尾部最后100行的日志,并且随文件;   2. ...

  10. 为什么我加了索引,SQL执行还是这么慢(一)?

    在MySQL中,有一些语句即使逻辑相同,执行起来的性能差异确实极大的. 先抛出一个结论:如果想使用索引树搜索功能,就不能使用数据库函数来处理索引字段值,而是在不改变索引字段值的同时,自己通过SQL语句 ...