Open xmammoths opened 6 years ago
这是一个签发自签名证书的示例:
[root@vsmHost12 apps]# ./openssl ecparam -genkey -name SM2 -out sm2.key
[root@vsmHost12 apps]# ./openssl req -new -subj "/CN=JNTA/OU=BJ/O=TASS/C=CN" -nodes -out ca.csr -key sm2.key -config zz.cnf
[root@vsmHost12 apps]# ./openssl x509 -req -days 3650 -sm3 -extfile v3-ca.ext -signkey sm2.key -in ca.csr -out ca-v3.crt
输出结果如下: [root@vsmHost12 apps]# cat sm2.key -----BEGIN EC PARAMETERS----- BggqgRzPVQGCLQ== -----END EC PARAMETERS----- -----BEGIN EC PRIVATE KEY----- MHcCAQEEIHNY3vnr23ni2aJqh+/PzXqUJqFtb2ecFXNd3i+BgJTuoAoGCCqBHM9V AYItoUQDQgAEuMWw+EuLV7Ic3LInZew2P3ukF2dBySagND8jQmTXKS+nhQyhckNN eEjhrq9pO0tT9e4lVXRZCjWj1bqH2I8gUA== -----END EC PRIVATE KEY-----
[root@vsmHost12 apps]# cat ca.csr -----BEGIN CERTIFICATE REQUEST----- MIH0MIGaAgEAMDgxDTALBgNVBAMMBEpOVEExCzAJBgNVBAsMAkJKMQ0wCwYDVQQK DARUQVNTMQswCQYDVQQGEwJDTjBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABLjF sPhLi1eyHNyyJ2XsNj97pBdnQckmoDQ/I0Jk1ykvp4UMoXJDTXhI4a6vaTtLU/Xu JVV0WQo1o9W6h9iPIFCgADAKBggqgRzPVQGDdQNJADBGAiEAv5zKLeUXbzQ37Ml8 DRKtWL6EiIiJAqwyIvYbO9Qan6oCIQDlPlfmTXaqkYFHBPGg3xJsjcFt7QzGWKuy 5daT7M+hvQ== -----END CERTIFICATE REQUEST-----
[root@vsmHost12 apps]# cat ca-v3.crt -----BEGIN CERTIFICATE----- MIIB8zCCAZqgAwIBAgIJAIR+ZCr3jonMMAoGCCqBHM9VAYN1MDgxDTALBgNVBAMM BEpOVEExCzAJBgNVBAsMAkJKMQ0wCwYDVQQKDARUQVNTMQswCQYDVQQGEwJDTjAe Fw0xODAxMjEwNTIxMTJaFw0yODAxMTkwNTIxMTJaMDgxDTALBgNVBAMMBEpOVEEx CzAJBgNVBAsMAkJKMQ0wCwYDVQQKDARUQVNTMQswCQYDVQQGEwJDTjBZMBMGByqG SM49AgEGCCqBHM9VAYItA0IABLjFsPhLi1eyHNyyJ2XsNj97pBdnQckmoDQ/I0Jk 1ykvp4UMoXJDTXhI4a6vaTtLU/XuJVV0WQo1o9W6h9iPIFCjgYwwgYkwDwYDVR0T AQH/BAUwAwEB/zAmBglghkgBhvhCAQ0EGRYXVEFTUyBIU00gQ0EgQ2VydGlmaWNh dGUwHQYDVR0OBBYEFJ5bjHqBhAY9eK/CDhKZuqjkCZ+1MB8GA1UdIwQYMBaAFJ5b jHqBhAY9eK/CDhKZuqjkCZ+1MA4GA1UdDwEB/wQEAwIBhjAKBggqgRzPVQGDdQNH ADBEAiB5TEUeE158G0y+1qdvlKT/B5RnetIIPukJqlr4P4LkYwIgQgyi2ttHtlhy /tyhKZAJwdLX+2mYaW7b2uxpX72SfCA= -----END CERTIFICATE-----
其中zz.cnf如下: [req] distinguished_name = req_distinguished_name [req_distinguished_name]
v3-ca.ext如下:
basicConstraints = critical, CA:true nsComment = TASS HSM CA Certificate subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer keyUsage = critical, digitalSignature, cRLSign, keyCertSign
tassl中,SM2曲线的名称就是SM2,而不是sm2p256v1; openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:SM2 -pkeyopt ec_param_enc:named_curve -out ca.key
openssl cihpers输出的是: ECC-SM4-SM3 ECDHE-SM4-SM3 这是国密TLSv1.1的密码套件之二 关于这点,你可以查看:GMT 0024-2014《SSL VPN技术规范》
tassl生成TLS测试证书的完整步骤: 1、在当前目录下创建一个名为"my"的目录; 2、将openssl.cnf复制到当前目录下(位于tassl的安装目录的ssl子目录中); 3、修改当前目录的openssl.cnf,方式如下: A、[req]选项中添加或者修改:default_md = sm3 B、修改[v3_req]选项内容为: basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature C、添加[v3enc_req]选项,其内容: basicConstraints = CA:FALSE keyUsage = keyAgreement, keyEncipherment, dataEncipherment 4、生成SM2参数文件 openssl ecparam -name SM2 -out SM2.pem
5、生成ca证书 openssl req -config ./openssl.cnf -nodes -subj "/C=CN/ST=BJ/L=HaiDian/O=Beijing JNTA Technology LTD./OU=SORB of TASS/CN=Test CA (SM2)" -keyout CA.key.pem -newkey ec:SM2.pem -new -out CA.req.pem openssl x509 -req -days 7300 -in CA.req.pem -extfile ./openssl.cnf -extensions v3_ca -signkey CA.key.pem -out CA.cert.pem cat CA.cert.pem > CA.pem cat CA.key.pem >> CA.pem rm CA.key.pem CA.req.pem CA.cert.pem
6、生成SSL服务端(或客户端)签名证书 openssl req -config ./openssl.cnf -nodes -subj "/C=CN/ST=BJ/L=HaiDian/O=Beijing JNTA Technology LTD./OU=SORB of TASS/CN=Test CA (SM2)" -keyout my/svr.key.pem -newkey ec:SM2.pem -new -out my/svr.req.pem openssl x509 -req -days 365 -in my/svr.req.pem -extfile ./openssl.cnf -extensions v3_req -signkey CA.pem -out my/svr.cert.pem cat my/svr.cert.pem > my/svr.pem cat my/svr.key.pem >> my/svr.pem rm -f my/svr.cert.pem my/svr.key.pem my/svr.req.pem
7、生成SSL服务端(或客户端)加密证书 openssl req -config ./openssl.cnf -nodes -subj "/C=CN/ST=BJ/L=HaiDian/O=Beijing JNTA Technology LTD./OU=SORB of TASS/CN=Test CA (SM2)" -keyout my/svrenc.key.pem -newkey ec:SM2.pem -new -out my/svrenc.req.pem openssl x509 -req -days 365 -in my/svrenc.req.pem -extfile ./openssl.cnf -extensions v3enc_req -signkey CA.pem -out my/svrenc.cert.pem cat my/svrenc.cert.pem > my/svrenc.pem cat my/svrenc.key.pem >> my/svrenc.pem rm -f my/svrenc.cert.pem my/svrenc.key.pem my/svrenc.req.pem
8、测试CNTLS 服务端:openssl s_server -accept 4433 -CAfile CA.pem -cert my/svr.pem -enc_cert my/svrenc.pem 客户端:(假设你已经使用第六步和第七步,生成了客户端的证书,签名证书为cli.pem,加密证书为:clienc.pem) 测试ECC-SM4-SM3套件:openssl s_client -connect 127.0.0.1:4433 -cntls 测试ECDHE-SM4-SM3套件:openssl s_client -connect 127.0.0.1:4433 -CAfile CA.pem -cert my/cli.pem -enc_cert my/clienc.pem -cntls
您好,按照上述步骤在启动服务端的时候出现问题,求帮助 openssl s_server -accept 4433 -CAfile CA.pem -cert my/svr.cert.pem -key my/svr.key.pem -enc_cert my/svrenc.cert.pem -enc_key my/svrenc.key.pem Using default temp DH parameters error setting private key 140364807919272:error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch:x509_cmp.c:340:
收到,用这个生成了根证书,然后修改ext文件签发出加密和签名证书,尝试成功了,谢谢。
样例生成的应该是根证书,需要用这个根证书再去签发证书。ext文件keyusage里面增加keyEncipherment 我生成了两个证书,一个服务器端,一个客户端。修改了demo里面的代码,服务器端主要修改文件名,客户端还需要增加key文件的宏定义。 通信成功! 赞Tassl!
楼上能不能加个好友,我最近也在弄这个,但是没有成功;qq: 420344414
@xmammoths 能具体怎么修改吗,我这里测试一样的错误,./openssl s_server -accept 4433 -CAfile CA.pem -cert my/svr.pem -enc_cert my/svrenc.pem Using default temp DH parameters error setting private key 139813839013544:error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch:x509_cmp.c:340:
我也是刚入门,贴一下我的测试过程,其中签名证书和加密证书试用了同一套证书,其实可以生成不同证书分开使用的。
1.生成CA自签证书 (1)./openssl ecparam -genkey -name SM2 -out ca.key (2)./openssl req -sm3 -new -x509 -days 365 -key ca.key -out ca.pem 2.生成服务器加密证书,并用CA根证书签名 (1) ./openssl ecparam -genkey -name SM2 -out serverT1.key (2) ./openssl req -sm3 -new -key serverT1.key -out serverT1.csr (3) ./openssl x509 -req -sm3 -days 3650 -extfile v3-cer.ext -CA ca.pem -CAkey ca.key -CAcreateserial -in serverT1.csr -out serverT1.pem 其中 v3-cer.ext文件内容为: basicConstraints = critical, CA:true nsComment = TASS HSM CA Certificate subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer keyUsage = digitalSignature, keyEncipherment, cRLSign, keyCertSign
sm2tls.c: 77、78行增加两个key的定义
129行、140行两个PrivateKey文件分别设置为对应的key文件: if (SSL_CTX_use_PrivateKey_file(ctx, CLIENT_S_KEY, SSL_FILETYPE_PEM) <= 0)
if (SSL_CTX_use_enc_PrivateKey_file(ctx, CLIENT_E_KEY, SSL_FILETYPE_PEM) <= 0)
最后编译运行,tls通信成功。
@xmammoths 感谢分享。
@xmammoths 非常感谢分享,分享答案实测完全可用,现在已顺利跑过demo.
@xmammoths @liclicli 我用xmammoths方法生成的证书,可以使用 openssl s_server -accept 4433 -CAfile ca.pem -cert serverT1.pem -key serverT1.key openssl s_client -connect localhost:4433 -cntls 但不是ECC-SM4-SM3,是 CIPHER is ECDHE-ECDSA-AES256-SHA 换成指定加密证书 openssl s_server -accept 4433 -CAfile ca.pem -cert serverT1.pem -key serverT1.key -enc_cert svrenc.pem -enc_key svrenc.key openssl s_client -connect localhost:4433 -cntls -cipher ECC-SM4-SM3 就报错了 ERROR 9024:error:1408A0C1:SSL routines:ssl3_get_client_hello:no shared cipher:.\ssl\s3 _srvr.c:1447: 不知道是代码问题还是跟证书有关
是不是证书有问题? 我们刚刚上传了sm2 tls 测试证书的生成工具,在Tassl_demo/mk_tls_cert下,你可以试试看。
@jntass 用脚本生成的证书 ,openssl s_server -accept 4433 -CAfile CA.pem -cert SS.cert.pem -key SS.key.pem -enc_cert SE.cert.pem -enc_key SE.key.pem 执行没有提示错误了 error setting private key 客户端连接成功 openssl s_client -connect 127.0.0.1:4433 -cntls
Cipher : ECC-SM4-SM3 Session-ID: 156FCA63A893A4F99D618126236FC580EBE361C03F19DB941B503974A16F3C18 非常感谢!
使用360国密版浏览器访问服务器,浏览器小锁头能看到自签的sm2证书,但是提示服务器证书不可信。
@memdumper 最近还在搞这个吗?请问当时怎么使用360国密浏览器访问的服务器啊?360国密浏览器是配置了什么东西呢?这边拿到一个文档
用法有两种:
1 客户端放签名证书:
可以直接把签名证书放到浏览器指定的配置文件(如果是证书链,则所有证书都要放进去)
如果浏览器安装在C盘,就是类似路径:
C:\Users\xuexiangxu\AppData\Roaming\360se6\Application\User Data\Default\ctl\ctl.dat
附件ctl.dat是签名证书的样例文件
mini_installer_sm.exe 可以读取明文的证书ctl.dat
2
客户端已经预埋了根证书,服务器可以用sm2-site_all.pem作为签名证书。
在ctl.dat中配置了服务器的CA证书、签名证书、加密证书,还是不行。
大家有人成功的吗?分享一下
@jntass 这个以什么为依据做测试的呢?只是 s_server 和 s_client 联通吗?
对比了一下 SM2certgen.sh 脚本,上边 @jntass 发的步骤里边生成签名证书、加密证书的两个部分不太一样,贴一下新的,方便大家看下~
tassl生成TLS测试证书的完整步骤:
1、在当前目录下创建一个名为"my"的目录;
2、将openssl.cnf复制到当前目录下(位于tassl的安装目录的ssl子目录中);
3、修改当前目录的openssl.cnf,方式如下:
A、[req]选项中添加或者修改:default_md = sm3
B、修改[v3_req]选项内容为:
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature
C、添加[v3enc_req]选项,其内容:
basicConstraints = CA:FALSE
keyUsage = keyAgreement, keyEncipherment, dataEncipherment
4、生成SM2参数文件
openssl ecparam -name SM2 -out SM2.pem
5、生成ca证书
./openssl req -config ./openssl.cnf -nodes -subj "/C=CN/ST=BJ/L=HaiDian/O=Beijing JNTA Technology LTD./OU=SORB of TASS/CN=Test CA (SM2)" -keyout CA.key.pem -newkey ec:SM2.pem -new -out CA.req.pem
./openssl x509 -req -days 7300 -in CA.req.pem -extfile ./openssl.cnf -extensions v3_ca -signkey CA.key.pem -out CA.cert.pem
./openssl x509 -in CA.cert.pem -issuer -subject > CA.pem
cat CA.key.pem >> CA.pem
rm CA.key.pem CA.req.pem CA.cert.pem
6、生成SSL服务端(或客户端)签名证书
./openssl req -config ./openssl.cnf -nodes -subj "/C=CN/ST=BJ/L=HaiDian/O=Beijing JNTA Technology LTD./OU=SORB of TASS/CN=Test CA (SM2)" -keyout my/svr.key.pem -newkey ec:SM2.pem -new -out my/svr.req.pem
./openssl x509 -req -days 365 -in my/svr.req.pem -CA CA.cert.pem -CAkey CA.key.pem -extfile ./openssl.cnf -extensions v3_req -out my/svr.cert.pem -CAcreateserial
./openssl x509 -in my/svr.cert.pem -issuer -subject > my/svr.pem
cat my/svr.key.pem >> my/svr.pem
rm -f my/svr.cert.pem my/svr.key.pem my/svr.req.pem
7、生成SSL服务端(或客户端)加密证书
./openssl req -config ./openssl.cnf -nodes -subj "/C=CN/ST=BJ/L=HaiDian/O=Beijing JNTA Technology LTD./OU=SORB of TASS/CN=Test CA (SM2)" -keyout my/svrenc.key.pem -newkey ec:SM2.pem -new -out my/svrenc.req.pem
./openssl x509 -req -days 365 -in my/svrenc.req.pem -CA CA.cert.pem -CAkey CA.key.pem -extfile ./openssl.cnf -extensions v3enc_req -out my/svrenc.cert.pem -CAcreateserial
./openssl x509 -in my/svrenc.cert.pem -issuer -subject > my/svrenc.pem
cat my/svrenc.key.pem >> my/svrenc.pem
rm -f my/svrenc.cert.pem my/svrenc.key.pem my/svrenc.req.pem
8、测试CNTLS
服务端:./openssl s_server -accept 4433 -CAfile CA.pem -cert my/svr.pem -enc_cert my/svrenc.pem -debug
客户端:(假设你已经使用第六步和第七步,生成了客户端的证书,签名证书为cli.pem,加密证书为:clienc.pem)
测试ECC-SM4-SM3套件:./openssl s_client -connect 127.0.0.1:4433 -cntls -debug
测试ECDHE-SM4-SM3套件:./openssl s_client -connect 127.0.0.1:4433 -CAfile CA.pem -cert my/cli.pem -enc_cert my/clienc.pem -cntls
运行如下命令: openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:sm2p256v1 -pkeyopt ec_param_enc:named_curve -out ca.key 报错误信息: parameter setting error 140470194325160:error:100C608D:elliptic curve routines:PKEY_EC_CTRL_STR:invalid curve:ec_pmeth.c:709: 有没有说明如何生成测试证书?
然后再运行: openssl ciphers 输出结果里面没有SM2,是否支持SM2?