Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

在ssl中无法使用sm2证书、key #8

Closed
mingpen opened this issue Nov 18, 2015 · 32 comments
Closed

在ssl中无法使用sm2证书、key #8

mingpen opened this issue Nov 18, 2015 · 32 comments

Comments

@mingpen
Copy link

mingpen commented Nov 18, 2015

在ssl server端使用sm2证书、key,
SSL_CTX_use_certificate_file、SSL_CTX_use_PrivateKey_file、SSL_CTX_check_private_key均通过,
但是ssl3_get_client_hello函数中调用的ssl3_choose_cipher返回null。

@guanzhi
Copy link
Owner

guanzhi commented Nov 18, 2015

GmSSL目前SSL功能开在开发中。

@mingpen
Copy link
Author

mingpen commented Nov 19, 2015

谢谢您的回复,
我正在现有的代码的基础上调试(rsa证书、key,RSA-SM4-SM3通过了;ecc-sm2还在摸索中),
使用的证书、key为sm2-initca.sh生成的cacert.pem、cakey.pem。

@guanzhi
Copy link
Owner

guanzhi commented Nov 19, 2015

如果您有相关的测试代码可以以可独立编译成可执行程序的C文件给GmSSL,我们可以根据测试的问题修正GmSSL的功能。

@mingpen
Copy link
Author

mingpen commented Nov 19, 2015

git.exe push -v --force --progress "origin" dev-linux
提交代码失败,Permission to guanzhi/GmSSL.git denied to mingpen

@mingpen
Copy link
Author

mingpen commented Nov 19, 2015

openssl ecparam -out EccCA.key -name prime256v1 -genkey
openssl req -newkey ec:EccCA.key -keyout ./demoCA/private/cakey.pem -out ./demoCA/careq.pem
openssl ca -config openssl.cnf -create_serial -out ./demoCA/cacert.pem -days 1095 -batch -keyfile ./demoCA/private/cakey.pem -selfsign -extensions v3_ca -infiles ./demoCA/careq.pem
三个命令产生的cert\key,在gmssl是可用,ciphers suite为ECDH-ECDSA-AES256-GCM-SHA384;
按照我之前的调试方法,是可将 对称加密算法改成sm4、摘要算法改成sm3;(使用openssl自带的ecc和sm4、sm3加密套件,可正常使用openssl ecc产生的cert、key)
还需要实现 将密钥交换算法、认证算法 替换成 sm2 (#7 提到 “ECDSA实现被替换为SM2签名了”,需再次确认)

@mingpen
Copy link
Author

mingpen commented Nov 19, 2015

后续调试方向为
crypto\ec\ec_pmeth.c 中的 sm2_pkey_meth、ec_pkey_meth

@mingpen
Copy link
Author

mingpen commented Nov 20, 2015

您什么时候有时间,将提交代码的权限给我和再继续开发gmssl的ssl功能?

@guanzhi
Copy link
Owner

guanzhi commented Nov 20, 2015

您可以建立一个分支修改后再提交回主分支

1 similar comment
@guanzhi
Copy link
Owner

guanzhi commented Nov 20, 2015

您可以建立一个分支修改后再提交回主分支

@mingpen
Copy link
Author

mingpen commented Nov 20, 2015

我是新建的 dev-linux 分支,
提示 Permission to guanzhi/GmSSL.git denied to mingpen

@mingpen
Copy link
Author

mingpen commented Nov 25, 2015

gmssl生成的sm2-sm2p256v1 证书,
可被如下ciphersuite:
{
1,
GM1_TXT_ECDHE_SM4_SM3,
GM1_CK_ECDHE_SM4_SM3,
SSL_kECDHe, /* ephemeral ECDH key exchange algorithm bits /
SSL_aECDH, /
auth algor bits /
SSL_SM4, /
symmetric encryption /
SSL_SM3, /
symmetric authentication /
SSL_TLSV1,
SSL_NOT_EXP | SSL_HIGH,
SSL_HANDSHAKE_MAC_SM3 | GM1_PRF_SM3, /
extra flags /
256, /
number of bits really used /
256, /
number of bits for algorithm */
},
使用了 。
能否将 gmssl的写权限,给我?
我将 新建的 dev-linux 分支,提交到GmSSL后,如果查看到dev-linux代码有问题,请指正。

@mingpen
Copy link
Author

mingpen commented Nov 25, 2015

https://github.com/guanzhi/GmSSL/settings/collaboration
可分配,写权限给指定用户

@lanzhiwen
Copy link

@mingpen 这个case你解决了吗?

@mingpen
Copy link
Author

mingpen commented Nov 30, 2015

@lanzhiwen gmssl当前生成的sm2证书,可用。
但不是完全更国密局给的标准,符合。

@lanzhiwen
Copy link

@mingpen 你目前可用的sm2证书是 sm2+sha256还是sm2+sm3?能把你目前的修订分享给我吗?谢谢,这是我的邮箱:zhiwensz@163.com

@lanzhiwen
Copy link

用gmssl生成的sm2证书可以通信了,但事实上是不是并没有使用sm2算法,因为在sm2算法里加调试,发现没有相应的log。默认生成的sm2证书似乎引用不到 sm2_pkey_meth。求解

@mingpen
Copy link
Author

mingpen commented Dec 3, 2015

@lanzhiwen 直接用的gmssl生成的 Signature Algorithm: ecdsa-with-SHA256(ASN1 OID: sm2p256v1) 证书。
过段时间有空的时候,将代码上传到github( 之前不知道,可以直接fork,后面fork一个分支)

@lanzhiwen
Copy link

确认是有使用sm2和sm3算法的,昨天是把CIPHER_DEBUG打开,log太多,调试log被淹没。sm4怎么使用能不能给些指导?

@lanzhiwen
Copy link

确认用了sm2+sm3+sm4。
@mingpen gmssl当前生成的sm2证书不是完全符合国密局给的标准,这个是什么意思?

@lanzhiwen
Copy link

感谢guanzhi的GmSSL项目,感谢mingpen的支持。这里我贴出制作证书的步骤,希望对大家有帮助。
以下做出的证书都是:Signature Algorithm: sm2sign-with-sm3

创建demoCA目录,在demoCA目录下执行:
mkdir certs crl newcerts private
touch index.txt
echo "01" > serial

将通过以下自签名生成的cacert.pem放到demoCA目录下,cakey.pem放到demoCA/private

创建公私钥和证书请求:
gmssl ecparam -genkey -name sm2p256v1 -out cakey.pem
gmssl req -new -sm3 -key cakey.pem -out cacsr.pem

自签名
gmssl req -x509 -sm3 -days 3650 -key cakey.pem -in cacsr.pem -out cacert.pem

ca签名(在demoCA的父目录下执行)
gmssl ca -md sm3 -in client_csr.pem -out client_cert.pem -days 3650

显示证书信息:
gmssl x509 -text -noout -in cacert.pem
gmssl req -in cacsr.pem -noout -text

证书通信测试命令
SERVER:
gmssl s_server -key server_key.pem -cert server_cert.pem -CAfile cacert.pem -cipher ECDHE-SM4-SM3 -verify 1

CLIENT:
gmssl s_client -key client_key.pem -cert client_cert.pem -CAfile cacert.pem -cipher ECDHE-SM4-SM3 -verify 1

@harula
Copy link

harula commented Dec 10, 2015

感谢guanzhi的GmSSL项目,感谢楼上各位大大的支持,@lanzhiwen 我在用楼楼的命令生成sm2根证书ok,但是签发用户证书的时候不行呢,不知楼楼是改了哪里的代码,能否指教一二
(ps:sm2_pkey_method已经调到了,稍微有点问题的是dosign初始化的时候degistinit不太好用,所以干脆直接注释入口返回1了,另外项目中的sm证书示例指纹算法是sha1呢,我前面生成的根证书指纹算法字段也是sha1,不知大大是否实现了sm3
pps:不是Signature Algorithm: sm2sign-with-sm3这个字段,在windows下打开证书,最末尾处有个指纹算法字段是sha1)

于是,以上发言不知是否暴漏了本渣智商之拙计,如能赐教,不甚感激!
@lanzhiwen @mingpen 也请两位大大不吝赐教

@harula
Copy link

harula commented Dec 10, 2015

@lanzhiwen pkey_sm2_sign这个函数里面调了SHA1_Init和SHA1_Update 是我智商捉急了?

ps:sm2_pkey_method已经调到了,稍微有点问题的是dosign初始化的时候degistinit不太好用,所以干脆直接注释入口返回1了,另外项目中的sm证书示例指纹算法是sha1呢,我前面生成的根证书指纹算法字段也是sha1,不知大大是否实现了sm3

就是pkey_sm2_ctrl的
case EVP_PKEY_CTRL_DIGESTINIT:
return pkey_sm2_ctrl_digestinit(pk_ctx, (EVP_MD_CTX *)p2);

其中在get_id的时候ec_key的method字段为0,返回错误,看见源代码中实现SM2_set_id却没有使用?

@mingpen
Copy link
Author

mingpen commented Dec 17, 2015

@guanzhi @lanzhiwen @harula @qiangbei 已经从 guanzhi 大神的分支fork出了(前段时间太忙了) https://github.com/mingpen/GmSSL/ ,更新的代码在 dev-linux分支(https://github.com/mingpen/GmSSL/commits/dev-linux ),
供指正其中的错误;

后续有时间再更新代码。

@connLAN
Copy link

connLAN commented Jan 28, 2016

@mingpen 请教您何时提交您的分支代码? 希望可以借鉴。

@James1256
Copy link

@lanzhiwen ,为什么要在demoCA目录下执行呢?不是可以能过命令指定的吗?

@James1256
Copy link

@lanzhiwen ,GmSSL还没有支持国密的证书,证书生成了,不能使用。

@connLAN
Copy link

connLAN commented Jun 3, 2016

Waitting for GMSSL really work up.

@orikasahibiki
Copy link

@lanzhiwen 按照您给的方法生成证书,但在gmssl req -new -sm3 -key cakey.pem -out cacsr.pem这一步会出现段错误,无法生成证书请求;在最新的centos和ubuntu下均能编译成功,但都停止在了这一步。

不知能否指导一下?或能否提供一个据此生成的ca和普通证书及key以便跟进测试,谢谢

@q1716665784
Copy link

@lanzhiwen 您好,请问如何用代码来创建安全套接字。demo/ssl下有个通用的ssl套接字serv和cli,但是这个用这个证书会出错。这个你有研究么?

@andylau004
Copy link

@lanzhiwen

请问
ca签名(在demoCA的父目录下执行)
gmssl ca -md sm3 -in client_csr.pem -out client_cert.pem -days 3650

这行命令里面 client_csr.pem 从哪儿来。

我测试。如下

gmssl ca -config /usr/local/ssl/openssl.cnf -md sm3 -in client_csr.pem -out client_cert.pem -days 3650
Using configuration from /usr/local/ssl/openssl.cnf
GMSSL: pem_lib.c 857: pem_str = EC PARAMETERS
GMSSL: pem_lib.c 858: suffix = PRIVATE KEY
GMSSL: pem_lib.c 863: p = PRIVATE KEY
GMSSL: pem_lib.c 857: pem_str = EC PRIVATE KEY
GMSSL: pem_lib.c 858: suffix = PRIVATE KEY
GMSSL: pem_lib.c 863: p = PRIVATE KEY
GMSSL: pem_lib.c 857: pem_str = EC PRIVATE KEY
GMSSL: pem_lib.c 858: suffix = PRIVATE KEY
GMSSL: pem_lib.c 863: p = PRIVATE KEY
GMSSL: d2i_pr.c 96
GMSSL: d2i_pr.c 118
GMSSL: d2i_pr.c 121
client_csr.pem: No such file or directory
140070988330688:error:02001002:system library:fopen:No such file or directory:bss_file.c:391:fopen('client_csr.pem','r')
140070988330688:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:393:

找不到文件。请教了。

@cs-kumamon
Copy link

@orikasahibiki
我同样卡在这里,运行完gmssl req -new -sm3 -key cakey.pem -out cacsr.pem命令后,输入一系列Email Address,password后,提示错误:1596:error:0D0DC06C:asn1 encoding routines:ASN1_item_sign_ctx:digest and key type not supported。
不知道你后续是否通过了,如果通过了,请教下是如何解决的。

@iF2007
Copy link

iF2007 commented Jun 11, 2018

@lanzhiwen 你好,请问你还有完整的客户端-服务器端的证书和测试命令吗?时间比较久了,还是想问一下。谢谢

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests