__certificate() — デジタル証明書の登録、登録解除、または認証

標準

標準/拡張機能 C/C++ 依存項目

z/OS®UNIX

両方

OS/390 V2R7

形式

#define _OPEN_SYS
#include <unistd.h>

int __certificate(int function_code,
                  int certificate_length,
                  char *certificate,…);

機能説明

__certificate() 関数により、ユーザーは現行の安全保護環境に関連付けられたユーザー ID で、または、ユーザー ID からデジタル証明書を登録または登録解除したり、ユーザー ID/パスワードの組み合わせの代わりにデジタル証明書を使用して、安全保護環境を認証することができます。

この関数は、少なくとも以下の引数を取ります。
function_code
次の関数のどちらかを指定します。
CERTIFICATE_REGISTER
引き渡された認証をユーザーに登録します。新規の安全保護環境は作成されません。 そして、ユーザーの認証は行われません。
__CERTIFICATE_DEREGISTER
引き渡された認証をユーザーから登録解除します。ユーザーに対して認証が既に登録されていることが必要です。
__CERTIFICATE_AUTHENTICATE
z/OS V1R4 より、この呼び出し元にパス済みの証明書を認証します。証明書は、既に登録済みである必要があります。
certificate_length
デジタル認証の長さ。長さがゼロでは戻り値は -1 と なり、errno に EINVAL が設定されます。
certificate
認証は、単一の BER エンコード X.509 認証でなければなりません。PKCS7、PEM、または Base64 エンコード認証が許可されます。
注: 単一の BER エンコード X.509 認証のみが、認証関数でサポートされています。

z/OS V1R4 より、__CERTIFICATE_AUTHENTICATE 関数コードは、以下のパラメーターが関数呼び出しで指定されることを要求します。

buflen (size_t)
buf が指すバッファーのサイズを指定します。ユーザー ID の buflen バイト (ヌル終了文字を含む) までがバッファーにコピーされます。 バッファーが過小だと、切り捨てが起こる場合があることに注意してください。バッファー・サイズは、システム上のいかなるユーザー ID にとっても十分大きいことが必要です。1 未満の値の場合、 戻り値は -1 となり、errno が EINVAL に設定されます。
buf (char *)
文字バッファーのポインターで、_certificate() はデジタル証明書に関連付けられたユーザー ID を設置します。値が NULL の場合は、戻り値は -1 となり、errno が EINVAL に設定されます。

使用上の注意

  1. _certificate 関数は、サーバーが、例えば、WWW 上で、サポートしているクライアントの認証の自動登録をサポートするサーバー用のものです。
  2. __CERTIFICATE_REGISTER 関数コードは、どのようなユーザー ID が付いていようとも、引き渡された認証を関連付けます。タスク・レベル ID が存在する場合、認証は、そのタスクに関連付けられます。タスク・レベル・セキュリティーは、 pthread_security_np()、__login() またはタスク・レベル ACEE を作成するその他の手段によって作成できます。タスク・レベル ID (ACEE) が存在しない場合は、認証は、アドレス・スペース ID に関連付けられます。
  3. __certificate() 関数は、z/OS UNIX System Services BPX1SEC サービスを呼び出します。BPX1SEC サービスについての詳細記述は、「 z/OS UNIX System Services プログラミング: アセンブラー呼び出し可能サービス 解説書」を参照してください。

制約事項

デジタル認証の登録および登録解除をサポートする セキュリティー・マネージャーがインストールされ、作動可能になっている ことが必要です。

戻り値

正常に実行された場合、__certificate() は 0 を戻します。

正常に実行されなかった場合、__certificate() は -1 を戻して、errno を次のいずれかの 値に設定します。
エラー・コード
説明
EACCES
許可が拒否されました。
EINVAL
パラメーターが無効です。
EMVSERR
MVS™ の環境エラーまたは内部エラーが発生しました。
EMVSSAF2ERR
セキュリティー・プロダクトでエラーが発生しました。別のプロセスに認証が既に定義されているか無効です。または 認証が必須の形式に一致しません。また、内部エラーが発生したときに認識されました。
ENOSYS
関数が設定またはインストールされていません。
EPERM
操作が許可されていませんでした。呼び出しプロセスに BPX.DAEMON 機能クラスの許可がない可能性があります。

__certificate() が失敗した場合 (ほとんどの場合) は、__errno2() を使用して詳細理由コードを入手します。

関連情報