$ gmssl.exe s_client -debug -status -security_debug -config ./openssl.cnf -port "9999" -CAfile "Root.crt" -cert "Client.crt" -key "Client.key"
客户端证书可以不设置
$ gmssl.exe s_server -debug -status_verbose -security_debug -config ./openssl.cnf -port "9999" -servername "gmservername" -CAfile "Root.crt" -cert "Server.crt" -key "Server.key" -cert2 "Server1.crt" -key2 "Server1.key"
第二个证书cert2和第二个私钥key2可以不设置,如果要让第二个证书和私钥起作用需要设置-servername "随便设置一个名字",不过设置了 -servername参数后,有一个堆栈溢出的BUG,需要修改一下,具体修改内容如下:
static int security_callback_debug(const SSL *s, const SSL_CTX *ctx,
int op, int bits, int nid,
void *other, void *ex)
{
security_debug_ex *sdb = ex;
int rv = 1, show_bits = 1, cert_md = 0;//rv赋值1
const char *nm;
//rv = sdb->old_cb(s, ctx, op, bits, nid, other, ex);//注释掉这行
//if (rv == 1 && sdb->verbose < 2)//注释掉这行
// return 1;//注释掉这行
BIO_puts(sdb->out, "SecCB: ");
一、生成根证书
1、生成私钥key
$ gmssl.exe ecparam -genkey -name sm2p256v1 -text -out Root.key -config ./openssl.cnf
2、生成签名请求
$ gmssl.exe req -new -key Root.key -out Root.req -subj /C=CN/ST=ShangHai/L=SH/O=Root/OU=RootSign/CN=Root/[email protected] -config ./openssl.cnf
3、生成根证书
$ gmssl.exe x509 -req -sm3 -days 3650 -in Root.req -signkey Root.key -out Root.crt
二、生成客户端证书
1、生成私钥key
$ gmssl.exe ecparam -genkey -name sm2p256v1 -text -out Client.key -config ./openssl.cnf
2、生成客户证书请求
$ gmssl.exe req -new -key Client.key -out Client.req -subj /C=CN/ST=ShangHai/L=GZ/O=Client/OU=ClientSign/CN=Client/[email protected] -config ./openssl.cnf
3、签发证书
$ gmssl.exe x509 -req -sm3 -days 3650 -in Client.req -CA Root.crt -CAkey Root.key -CAcreateserial -out Client.crt
4、证书验证
$ gmssl.exe verify -CAfile Root.crt Client.crt
5、证书转换成浏览器认识的格式.pfx
$ gmssl.exe pkcs12 -export -inkey Client.key -in Client.crt -out browser.pfx -passin pass:xxx -passout pass:xxx
三、生成服务器证书
1、生成私钥key
$ gmssl.exe ecparam -genkey -name sm2p256v1 -text -out Server.key -config ./openssl.cnf
2、证书请求
$ gmssl.exe req -new -key Server.key -out Server.req -subj /C=CN/ST=ShangHai/L=GZ/O=Server/OU=ServerSign/CN=Server/[email protected] -config ./openssl.cnf
3、签发证书
$ gmssl.exe x509 -req -sm3 -days 3650 -in Server.req -CA Root.crt -CAkey Root.key -CAcreateserial -out Server.crt
4、证书验证
$ gmssl.exe verify -CAfile Root.crt Server.crt
生成服务器的另外一个证书
$ gmssl.exe ecparam -genkey -name sm2p256v1 -text -out Server1.key -config ./openssl.cnf
$ gmssl.exe req -new -key Server1.key -out Server1.req -subj /C=CN/ST=ShangHai/L=GZ/O=Server/OU=ServerSign/CN=Server/[email protected] -config ./openssl.cnf
$ gmssl.exe x509 -req -sm3 -days 3650 -in Server1.req -CA Root.crt -CAkey Root.key -CAcreateserial -out Server1.crt
$ gmssl.exe verify -CAfile Root.crt Server1.crt