openssl - 为 OPC 客户端生成证书
问题描述
我正在编写一个 OPC UA 客户端以连接到 Sofnet(西门子的 OPC 服务器)。连接的服务器方法是 SignAndEncrypt 所以我需要一个“der”格式的 x509 证书。
我用 openssl 制作了自己的自签名证书,但是有一个名为“Subject Alt Names”的字段,我必须在其中指定 URI 的应用程序。我已经看到这个字段可以用 openssl 的配置文件填充,但是当我创建证书时,我看不到“主题替代名称”。
有人可以帮我创建证书或给我一个线索来验证我的 OPC 客户端吗?
提前致谢。
解决方案
您可以制作一个 bash 文件(即:mkcert.sh),它将完成以下所有过程:
- 创建 2048 位 RSA 密钥。
- 创建证书请求。
- 使用您自己的密钥(自签名证书)对其进行签名,并将 extensions.cnf 中的额外信息添加到证书中
- 获取证书的 PEM 和 DER 版本(选择)
bash 文件应包含
openssl genrsa -out default_pk.pem 2048
openssl req -new -key default_pk.pem -out cert.csr -subj "/C=US/ST=NY/L=NY/O=Organization/OU=OrganizationUnit/CN={YOUR_IP}"
openssl x509 -req -days 3650 -extfile extensions.cnf -in cert.csr -signkey default_pk.pem -out public.pem
openssl x509 -in public.pem -inform PEM -out public.der -outform DER
然后您需要包含 SubjectAltName 信息和一些其他信息的 extensions.cnf 文件。
basicConstraints=CA:TRUE
authorityKeyIdentifier=keyid,issuer
keyUsage=dataEncipherment,keyEncipherment,nonRepudiation,digitalSignature,keyCertSign,cRLSign
extendedKeyUsage=serverAuth,clientAuth
subjectAltName=URI:URN:{YOUR_IP}
将这两种情况下的 {YOUR_IP} 替换为您的真实 OPC UA 客户端 IP。
推荐阅读
- swift - UITableView 自动尺寸不起作用:UIView-Encapsulated-Layout-Height 错误
- java - 如何以编程方式关闭 JMX?
- sql - 如何在 sqlite 数据库中转换 sqlite 中的日期格式(从 dd/mm/yy 到 dd/mm/yyyy)和(d/m/yy 到 dd/mm/yyyy)
- java - spring cloud streamrabbitmq binder-spring cloud函数错误处理
- google-apps-script - 使用来自 Apps Script Add-on 的 oauth 令牌获取 Cloud Functions 中的用户信息
- c# - 当我不想共享实际的域模型时如何引发域事件
- ios - swift tableView.contentSize.height iOS 13 和 iOS 11 不同,为什么?
- python - Python matplotlib tkinter - 按钮不更新图形
- installation - 在 Inno Setup 中以管理员权限执行安装后程序
- d3.js - 如何将 svg 对象移动到新坐标