OPC UAのセキュリティの証明書を実際に発行してみました。
セキュリティポリシーの「Basic256Sha256」を使用しています。
サーバー・クライアント間でのセキュリティの設定方法含めて詳しく紹介します。
OPC UAでセキュリティの証明書を発行してみた
OPC UAのセキュリティポリシーの「Basic256Sha256」を使ってみました。
サーバー側で証明書を発行した後に、クライアント側と設定することで対応できました。
サーバーをラズベリーパイにして、クライアントを(フリーソフトの)UaExpertを使用しました。
PLCのデータをOPC UAのセキュリティ環境下で通信テストができています。
設定方法から実際の動作まで紹介していきます。
OPC UAとは
産業システムには数多くの産業ネットワークの規格が有ります。
OPC UAは数多くの規格超えて通信・データ収集・機械制御などが可能になる通信規格です。
(下記図はかなり大雑把なイメージ図です)
下記記事で実際にOPC UAを使ってデータを収集しています。(リンク先はこちら)
PythonでIoT!Raspberry Piで産業用のデータ収集してみた

OPC UAのセキュリティポリシーのBasic256Sha256
簡単にOPC UAの接続テストするならばセキュリティ無しの方が楽です。
OPC UAのセキュリティの機能を使おうとすると、何かしら設定が必要になります。
ただ、現実的に産業用データの通信にセキュリティは普通使います。
(OPC UAのメリット・特徴であるセキュリティを使わないケースは少ないと思います…)
今回はOPC UAのセキュリティポリシーの「Basic256Sha256」を使って通信テストします。
OPC UAの通信テストの環境構築する
今回のOPC UAのテスト環境としては下記です。
OPC UA通信させるには「サーバー」と「クライアント」が必要になります。
- OPC UAサーバー(PLC) …「ラズベリーパイ」と「ソフトウェアPLC(CODESYS)」
- OPC UAクライアント …「普通のPC」と「クライアントソフト(UaExpert)」
OPC UAサーバーをフリーで作る
ラズベリーパイさえあれば、テストレベルならば無料(フリー)で対応可能です。
OPC UAサーバーを作る方法に関しては下記記事に記載しています。(リンク先はこちら)
OPC UAでPLC(シーケンサ)と接続!サーバーの環境構築してみた

OPC UAクライアントをフリーで作る
OPC UAクライアントに関しては普通のPCがあれば問題有りません。
下記記事同様にフリーのソフト(UaExpert)を使えば無料で対応可能です。(リンク先はこちら)
OPC UAクライアントのフリーソフトUaExpertを使ってみた

OPC UAサーバーで証明書を発行する
最初にOPC UAサーバー側(ラズパイ+CODESYS)から証明書を発行します。
CODESYSのソフトを使い、OPC UAサーバーとPLCを立ち上げていきます。
ラズベリーパイにCODESYSのインストール方法
最初にラズベリーパイにCODESYSをインストールする必要があります。
CODESYSのダウンロード方法含めて詳細な方法については下記記事をご覧ください。
ラズベリーパイでPLC(シーケンサ)・ラダーの使い方を学んでみた

CODESYS Security Agent
OPC UAの証明書を発行するにはセキュリティのパッケージのインストールが必要です。
CODESYS Security Agentというパッケージです。
無料でダウンロード・インストールできます。ダウンロード先は下記です。
https://store.codesys.com/codesys-security-agent.html
ラダーの自己保持回路を作る
特にテストプログラムは何でも大丈夫です。筆者はラダーで基本的な自己保持回路を組みました。
もし同様な回路を作る方がいれば下記記事をご参考ください。回路図含めて記載しています。

OPC UAからPLCの入出力にアクセスできるように設定する
CODESYSの中で持っているPLCの入出力データをOPC UAからアクセスできるように設定します。
最初に「Application」を右クリックします。
そして「オブジェクトの追加」⇒「シンボルコンフィグレーション」を選択します。
「シンボルコンフィグレーション」の項目のウインドウが出てきます。
「OPC UA機能をサポート」にチェックがあることを確認して進めていきます。
これで「シンボルコンフィグレーション」の設定ができるようになりました。
一度「ビルド」してOPC UAでアクセスしたい入出力(変数)を選択します。
OPC UAサーバーからセキュリティ証明書を発行する
ビルド後にエラー無くラズベリーパイにログイン出来たら、セキュリティ画面に移ります。
「表示」タブから→「セキュリティ画面」に移動できます。
此処から先の手順に関してはCODESYSのオンラインヘルプページにも記載があります
実施手順が記載されていました。(リンク先はこちらから)
セキュリティ画面から「Devices」→「Device」→「OPC UA Server」を選択します。
まだ最初の時点では(not available)になっているはずです。
「OPC UA Server」の左上のアイコンをクリックします。
「Certificate Settings」と設定が出てきますが、「OK」を押して進めていきます。
ラズベリーパイからOPC UAのセキュリティ証明書を発行するようになりました。
(ここまでの手順を実施したらラズパイを一度再起動した方が良いと思います。)
OPC UAクライアントと証明書を設定する
この時点ではまだサーバー側が一方的に証明書を発行しているだけです。
次にOPC UAクライアント(UaExpert)の設定を行います。
OPC UAクライアントソフト(UaExpert)のダウンロード方法は下記記事をご参考下さい。
OPC UAクライアントのフリーソフトUaExpertを使ってみた

OPC UAクライアントからOPC UAサーバーを選択する
UaExpertのツールバーの箇所で「+」をクリックすると接続するOPC UAサーバを選択できます。
今回のテストの場合は「Custom Discovery」の<Double click…>の箇所を選択します。
「opc.tcp://」の後に接続するOPC UAサーバーのIPアドレスを入力すると接続方法が選択できます。
OPC UAセキュリティーポリシーの「Basic256Sha256」を選択します。
鍵マークがついたものを選びます。
OPC UAサーバーからの証明書を信頼する
Projectの箇所に接続するOPC UAサーバー「OPCUAServer@raspberrypi」が出てきます。
右クリックして「Connect」を選択します。
最初にをアクセスしたときにCertificate Validation(証明書の検証)が発生します。
サーバーの証明書(Certificate)を信頼(Trust)します。
ただ最初に信頼(Trust)した際には、まだエラーが発生するはずです。
実際のエラーのログは下記形でした。
1 2 3 4 5 6 7 8 |
09:12:15.766 | Server Node | OPCUAServer@raspberrypi | Endpoint: 'opc.tcp://raspberrypi:4840' 09:12:15.766 | Server Node | OPCUAServer@raspberrypi | Security policy: 'http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256' 09:12:15.766 | Server Node | OPCUAServer@raspberrypi | ApplicationUri: 'urn:raspberrypi:3S%20-%20Smart%20Software%20Solutions%20GmbH:CODESYS%20Control%20for%20Raspberry%20Pi%20MC%20SL:OPCUA:Server' 09:12:15.766 | Server Node | OPCUAServer@raspberrypi | Used UserTokenType: Anonymous 09:12:15.841 | General | | [uastack] OpcUa_TcpConnection_ProcessResponse: Error Message! 09:12:15.841 | General | | [uastack] OpcUa_TcpConnection_ProcessResponse: Status 0x80130000! 09:12:15.849 | Server Node | OPCUAServer@raspberrypi | Error 'BadSecurityChecksFailed' was returned during OpenSecureChannel 09:12:15.860 | Server Node | OPCUAServer@raspberrypi | Connection status of server 'OPCUAServer@raspberrypi' changed to 'Disconnected'. |
OPC UAクライアントからの証明書を信頼する
CODESYS(OPC UAサーバー)側で、OPC UAクライアントからの証明書を信頼(Trust)します。
セキュリティ画面の「Quarantined Certificates」にUaExpertからの証明書があります。
信頼する証明書の「Trusted Certificates」にドラッグ&ドロップします。
OPC UAクライアント側から再度接続する
その後UaExpertで再度「Connect」すると、OPC UAをセキュリティ環境で通信できました。
セキュリティポリシーの「Basic256Sha256」で対応できています。
その際のログを残しておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
09:15:24.110 | Server Node | OPCUAServer@raspberrypi | Endpoint: 'opc.tcp://raspberrypi:4840' 09:15:24.110 | Server Node | OPCUAServer@raspberrypi | Security policy: 'http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256' 09:15:24.110 | Server Node | OPCUAServer@raspberrypi | ApplicationUri: 'urn:raspberrypi:3S%20-%20Smart%20Software%20Solutions%20GmbH:CODESYS%20Control%20for%20Raspberry%20Pi%20MC%20SL:OPCUA:Server' 09:15:24.110 | Server Node | OPCUAServer@raspberrypi | Used UserTokenType: Anonymous 09:15:24.714 | General | | The hostname or IP address in the server certificate does not match the hostname or IP address the client connected to 09:15:31.883 | General | | Reading DataTypeDescriptions failed. 09:15:31.883 | General | | Getting DataType nodes failed. 09:15:31.896 | AddressSpaceModel | OPCUAServer@raspberrypi | Registered for ModelChangeEvents 09:15:31.896 | Server Node | OPCUAServer@raspberrypi | Connection status of server 'OPCUAServer@raspberrypi' changed to 'Connected'. 09:15:31.896 | Server Node | OPCUAServer@raspberrypi | Revised values: SessionTimeout=1200000, SecureChannelLifetime=3600000 09:15:31.928 | AddressSpaceModel | OPCUAServer@raspberrypi | Browse on node 'i=84' succeeded. 09:15:31.932 | TypeCache | OPCUAServer@raspberrypi | Reading type info of NodeId NS0|Numeric|35 succeeded 09:15:31.942 | TypeCache | OPCUAServer@raspberrypi | Reading type info of NodeId NS0|Numeric|33 succeeded 09:15:31.951 | TypeCache | OPCUAServer@raspberrypi | Reading type info of NodeId NS0|Numeric|31 succeeded 09:15:31.994 | AddressSpaceModel | OPCUAServer@raspberrypi | Browse on node 'i=85' succeeded. 09:15:32.031 | TypeCache | OPCUAServer@raspberrypi | Reading type info of NodeId NS0|Numeric|2004 succeeded 09:15:32.038 | TypeCache | OPCUAServer@raspberrypi | Reading type info of NodeId NS0|Numeric|58 succeeded |
あとは自由にアドレス空間から必要なデータをドラッグ&ドロップして確認できます。
まとめ
今回はOPC UAのセキュリティと証明書に関して紹介させていただきました。
記事をまとめますと下記になります。
OPC UAはラズベリーパイ(raspberry pi)で無料で作れて、通信テストもすることも可能です。
皆様もぜひ試してみてください。
コメント