第一步,生成私钥

$ openssl genrsa -out privatekey.pem 2048

查看生成的私钥内容

$ file privatekey.pem
privatekey.pem: PEM RSA private key
$ cat privatekey.pem
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA8AWq2V3g4B9fN7Tj37k0Wmut70ylRyziebyE3baA24pgixgu
8wpXztHdF5YixjbOdLvaqGQ3ck1CPRMD+cB3awgfw+/jPJqzdg2ACa9IFkIM5eaH
...
Zvib8+BsiAoiqXr4vAi8Lb64TJv3JDwOKEH/dnpXVmsDEt3wKRWX5A==
-----END RSA PRIVATE KEY-----

另外可以用openssl命令查看私钥的明细

$ openssl rsa -in privatekey.pem -noout -text
Private-Key: (2048 bit)
modulus:
...

第二步,由私钥生产对应的公钥

$ openssl rsa -in privatekey.pem -pubout -out publickey.pem

查看生成的公钥内容

$ file publickey.pem
publickey.pem: ASCII text
$ cat publickey.pem
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8AWq2V3g4B9fN7Tj37k0
...
vQIDAQAB
-----END PUBLIC KEY-----

另外,也可以使用openssl命令查看公钥的明细

$ openssl rsa -pubin -in publickey.pem -noout -text
Public-Key: (2048 bit)
Modulus:
...

第三步,根据私钥生成证书签名请求

$ openssl req -new -key privatekey.pem -out csr.pem -subj "/C=CN/ST=BJ/L=BJ/O=HD/OU=ops/CN=*.joker.com/emailAddress=hello@world.com"

查看证书请求文件的内容

$ file csr.pem
csr.pem: PEM certificate request
$ cat csr.pem
-----BEGIN CERTIFICATE REQUEST-----
MIICvjCCAaYCAQAweTELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkJKMQswCQYDVQQH
...
c8L1GiAnIN8bXSWpZT2ZfHcnVbYvz4bgxFGTncA06JwDHw==
-----END CERTIFICATE REQUEST-----

也可以通过openssl命令查看证书请求文件的明细。

$ openssl req -noout -text -in csr.pem
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=CN, ST=BJ, L=BJ, O=HD, OU=dev, CN=hello/emailAddress=hello@world.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                ...

第四步,发送签发请求到CA进行签发,生成 x509证书

这里我们没有CA服务器,所以需要假装生成一个CA服务器

4.1 生成CA私钥

$ openssl genrsa -out ca.key 2048

4.2 根据CA私钥生成CA的自签名证书

$ openssl req -new -x509 -days 365 -key ca.key -out ca.crt -subj "/C=CN/ST=BJ/L=BJ/O=HD/OU=dev/CN=ca/emailAddress=ca@world.com"

注意这一步和前面第三步的区别,这一步直接生成自签名的证书,而在第三步生成的是证书签名请求,这个证书签名请求是要发给CA生成最终证书的。

查看自签名的CA证书

$ file ca.crt
ca.crt: PEM certificate
$ openssl x509 -in ca.crt -noout -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            8a:6e:10:c5:f6:18:f7:67
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=CN, ST=BJ, L=BJ, O=HD, OU=dev, CN=ca/emailAddress=ca@world.com
        Validity
            Not Before: May 26 00:36:39 2018 GMT
            Not After : May 26 00:36:39 2019 GMT
        Subject: C=CN, ST=BJ, L=BJ, O=HD, OU=dev, CN=ca/emailAddress=ca@world.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:cf:0c:6b:ed:2a:d7:28:55:a2:54:5a:78:1c:6a:
                    ...
                    cb:c5
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                6E:00:06:26:92:A0:02:66:73:8C:A9:7E:47:DC:EB:A2:3F:91:F7:BC
            X509v3 Authority Key Identifier:
                keyid:6E:00:06:26:92:A0:02:66:73:8C:A9:7E:47:DC:EB:A2:3F:91:F7:BC

            X509v3 Basic Constraints:
                CA:TRUE
    Signature Algorithm: sha256WithRSAEncryption
         bc:d7:92:12:56:30:10:a8:b3:cf:b0:0d:7c:52:79:7b:22:2a:
         ...
         e5:11:28:99

4.3 使用CA的私钥和证书对用户证书签名

$ openssl x509 -req -days 3650 -in csr.pem -CA ca.crt -CAkey ca.key -CAcreateserial -out crt.pem

查看生成证书内容

$ file crt.pem
crt.pem: PEM certificate
$ cat crt.pem
-----BEGIN CERTIFICATE-----
MIIDaTCCAlECCQDzYtuYa7OlUTANBgkqhkiG9w0BAQsFADB0MQswCQYDVQQGEwJD
...
Zo7/JmQs
tCqjMPMc1lPuS3zmHg==
-----END CERTIFICATE-----
$ openssl x509 -in crt.pem -noout -text
Certificate:
    Data:
        Version: 1 (0x0)
        Serial Number:
            f3:62:db:98:6b:b3:a5:51
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=CN, ST=BJ, L=BJ, O=HD, OU=dev, CN=ca/emailAddress=ca@world.com
        Validity
            Not Before: May 26 00:40:35 2018 GMT
            Not After : May 23 00:40:35 2028 GMT
        Subject: C=CN, ST=BJ, L=BJ, O=HD, OU=dev, CN=hello/emailAddress=hello@world.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:b7:7b:c3:e4:12:65:b9:1d:04:8b:6d:b2:f4:ff:
                    ...
                    e3:bd
                Exponent: 65537 (0x10001)
    Signature Algorithm: sha256WithRSAEncryption
         8e:5f:5e:f3:fa:8a:bf:e4:7f:e1:84:99:24:3d:a6:86:ce:db:
         ...
         4b:7c:e6:1e
本地测试的话直接用如下

2.使用openssl充当CA权威机构创建私钥(生产不可能使用此方式生成证书,不被互联网CA权威承认的黑户证书)
1 # openssl genrsa -idea -out server.key 2048

3.生成自签证书,同时去掉私钥的密码
2 # openssl req -days 36500 -x509 \
-sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt

  

openssl生成证书及签名的更多相关文章

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

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

  2. 使用OpenSSL生成证书

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

  3. 如何利用OpenSSL生成证书

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

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

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

  5. Android APK生成证书并签名方法

    Android APK生成证书并签名方法 android cordova keystore android证书签名 阅读:925 时间:2018年09月20日 Android开发者可能对此很熟悉.使用 ...

  6. IIS 使用OpenSSL 生成的自签名证书,然后使用SingalR 客户端访问Https 站点通信

    使用SignalR 的客户端去发送消息给使用 https 部署的站点,官方文档目前并没有详细的教程,所以在此记录下步骤: 使用管理员身份打开cmd 窗口,选择一个整数保存文件夹的地址,切换到对应的文件 ...

  7. 使用 openssl 生成证书

    一.openssl 简介 目前最流行的 SSL 密码库工具官网:https://www.openssl.org/source/ 构成部分 密码算法库 密钥和证书封装管理功能 SSL通信API接口 用途 ...

  8. PHP通过OpenSSL生成证书、密钥并且加密解密数据,以及公钥,私钥和数字签名的理解

    一.公钥加密假设一下,我找了两个数字,一个是1,一个是2.我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥. 我有一个文件,不能让别人看,我就用1加密了.别人找到了这个文 ...

  9. openssl 生成证书基本原理

    摘自:http://blog.csdn.net/oldmtn/article/details/52208747 1. 基本原理 公司一个项目要进行交易数据传输,因为这个项目银行那边也是刚刚开始启动,所 ...

随机推荐

  1. yii2 Query Builder 查询打印sql语句

    $query = new Query(); $query->select('gs.*, g.goods_images, sa.attr_name, sa.is_default, sa.alias ...

  2. Json、Pickle

    目录 Json pickle Json JSON是一个序列化模块,一种用于存储和交换数据的语法. JSON是用JavaScript对象表示法(JavaScript object notation)格式 ...

  3. 列表:list

    #_*_coding:utf-8_*_#作者:王佃元#日期:2019/12/7'''数据类型整数字符串列表.元组name = 'wuchao'name = 'jinxin'name = 'xiaohu ...

  4. Layui 必填验证

    lay-verify="required"

  5. 为什么要使用 Go 语言?Go 语言的优势在哪里?

    golang主要特性 1.语法简单 舍弃语法糖,严格控制关键字 C++语法糖之多,令人发指,而C又太过于底层,容易出现自己造轮子的情况,如何在两者之间取舍,是每一个转向golang的工程师曾经思考过的 ...

  6. idea 2018.1 创建springboot开启找回Run Dashboard

    Run Dashboard 他是一个代替Run窗口的一个更好清晰简介的一个启动器.一般我们需要启动多个窗口时,Run窗口不能让我们直观的看到我们看到每一个端口的变化. 我们可以对比一下这个是Run D ...

  7. IDEA调试进入class文件

    今天用IDEA调试时,一直进入class文件,而没有进入java文件. 错误原因 出现这种情况,有可能是Module有多个同名的依赖,调试时程序进入了同名的jar包里面,而不是同名的Module. 如 ...

  8. 【07月03日】A股ROE最高排名

    个股滚动ROE = 最近4个季度的归母净利润 / ((期初归母净资产 + 期末归母净资产) / 2). 查看更多个股ROE最高排名 兰州民百(SH600738) - ROE_TTM:86.45% - ...

  9. Python 的文件保存路径

    1.保存在当前代码同级的目录下: 2.保存在代码文件夹外面一层的新文件夹(data文件夹与代码文件夹同级)里: 3.保存在下一级的子文件夹里

  10. Django阅读目录

    (一)Django框架简介 (二)Django框架之第二篇--app注册.静态文件配置.form表单提交.pycharm连接数据库.django使用mysql数据库.表字段的增删改查.表数据的增删改查 ...