OpenSSL命令

Posted ahuoheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenSSL命令相关的知识,希望对你有一定的参考价值。

Openssl Windows下编译过程

1、下载openssl源代码以及相应的vc工程

2、下载perl工具,如:ActivePerl-5.8.8.820-MSWin32-x86-274739.msi

3、安装ActivePerl

4、打开控制台程序,在openssl解压后的目录下执行Perl Configure VC-WIN32命令,注意,一定要在这个目录下执行该命令,否则找不到Configure文件,当然,你也可以指定完整的Configure文件路径。

5、openssl目录下运行ms\\do_ms.bat

6、打开VC工程,batch build所有工程,输出的文件在out32dll里面


Openssl 建立CA过程

1、编译openssl

2、生成目录树

CA认证中心需要下列相关目录,请手动建立下列目录。

CARoot

|__certs

|__newcerts

|__private

|__crl

3、在private目录下生成随机数文件.rnd

可以用C:\\CARoot>edit private\\.rnd这种方式生成

4、生成文本数据库文件

CARoot根目录下手动创建一个空的文本数据库文件index.txt

5、生成证书序列号文件

在CARoot下创建证书序列号文件serial,使用文本编辑器打开,在文件中输入"01";(文件内容无银号),

或者使用命令$echo 01>serial (注意确认serial文件内容为01,并且无引号)。

C:\\CARoot>echo 01 > serial

6、修改配置文件

将$OPENSSL_HOME下的apps\\openssl.cnf拷贝到CARoot目录下,然后修改CA的配置文件

修改openssl.cnf文件

将下面部分修改:

[ CA_default ]

dir  = ./demoCA  # Where everything is kept

certs  = $dir/certs  # Where the issued certs are kept

crl_dir  = $dir/crl  # Where the issued crl are kept

database = $dir/index.txt # database index file.

new_certs_dir = $dir/newcerts  # default place for new certs.

certificate = $dir/cacert.pem  # The CA certificate

serial  = $dir/serial   # The current serial number

crl  = $dir/crl.pem   # The current CRL

private_key = $dir/private/cakey.pem# The private key

RANDFILE = $dir/private/.rand # private random number file

修改后

RANDFILE  = $ENV::HOME/private/.rnd

(修改默认的随机数文件的位置)

[ CA_default ]

dir  = ./  # Where everything is kept

certs  = $dir/certs  # Where the issued certs are kept

crl_dir  = $dir/crl  # Where the issued crl are kept

database = $dir/index.txt # database index file.

new_certs_dir = $dir/newcerts  # default place for new certs.

certificate = $dir/private/ca.crt  # The CA certificate

serial  = $dir/serial   # The current serial number

crl  = $dir/crl.cer  # The current CRL

private_key = $dir/private/ca.key# The private key

RANDFILE = $dir/private/.rnd # private random number file 

7、产生CA私钥

genrsa -out private\\ca.key -rand private\\.rnd 2048

genrsa -out private\\ca.key -rand private\\.rnd -des3 2048  (生成des3加密的私钥文件)

生成2048位的私钥文件,为保障安全使用第二种,用des3加密。

8、生成CA证书

req -new -x509 -days 3650 -key private\\ca.key -out private\\ca.crt -config openssl.cnf

(查看证书文件:x509 -in cacert.pem -text -noout)

-------------分界线后面是CA操作-----------------

9、生成自签名证书请求,并签发证书

生成密钥

genrsa -out certs\\cert.key -rand private\\.rnd -des3 2048

生成证书请求

req -new -x509 -days 3650 -key certs\\cert.key -out certs\\cert.crt -config openssl.cnf

签发自签名证书

ca -ss_cert certs\\cert.crt -config openssl.cnf -policy policy_anything -out certs\\signedcert.crt

10、生成普通证书请求,并签发证书

生成密钥及证书请求

req -newkey rsa:1024 -keyout certs\\mycert.key -out certs\\mycert.pem -config openssl.cnf

签发证书

ca -in certs\\mycert.pem -out newcerts\\mycert.cer -policy policy_anything -config openssl.cnf

11、证书文件和密钥文件合并成pfx文件

pkcs12 -export -in certs\\cert.crt -inkey certs\\cert.key -out certs\\mypkcs12.pfx

pkcs12 -export -in certs\\ciecc-ipedo.cer -inkey certs\\ciecc-ipedo.key -out certs\\ipedo.pfx

12、通过请求生成cer和key文件

ca -in certs\\certreq.txt -config openssl.cnf -policy policy_anything -out certs\\newipedo.cer 

13、启动OSCP服务器

openssl ocsp -index ./index.txt -CA ./cacert.pem -rsigner ./cacert.pem -rkey ./private/cakey.pem -port 8888

openssl ocsp -index ./index.txt -CA ./private/ca.crt -rsigner ./private/ca.crt -rkey ./private/ca.key -port 8888

14、OCSP查询

openssl ocsp -issuer demoCA/cacert.pem -cert ssl.crt/server.crt -host 0.0.0.0:8888

1、吊销已签发的证书可以使用ca中的 -revoke 命令:

openssl ca -revoke client.pem -keyfile ca.key -cert ca.crt

这里可能会有一个问题,因为默认的情况下index.txt文件应该放在demoCA文件夹下面,因此需要在这里建立一个demoCA文件夹并建立一个index.txt文件,就可以了

2、证书被吊销之后,还需要发布新的CRL文件:

openssl ca -gencrl  -out ca.crl -keyfile ca.key -cert ca.crt

验证证书的状态:

verify -CAfile /usr/share/ssl/certs/ca-bundle.crt -purpose any -verbose amd.cer 




以上是关于OpenSSL命令的主要内容,如果未能解决你的问题,请参考以下文章

OpenSSL 命令检查服务器是不是提供证书

如何使用 OpenSSL 生成 RSA 私钥?

OpenSSL 生成 RSA 公钥时,默认指数为 65535,如何更改?

android 生成签名证书

做CA证书嫌OpenSSL命令行麻烦吗

如何在centos中安装openssl