2012-01-25 32 views
3

HTTPで正常に動作している既存のDataSnapサーバー(Windowsサービス)があり、追加プロトコルとしてHTTPSを追加したいと考えています。 SSL証明書を取得してインストールし、証明書ファイル(.crt)と秘密鍵ファイル(.key)を生成しました。テストとして、Delphi XE2 DataSnap Serverウィザードを使用し、「HTTPS」にチェックを入れて証明書ページを取得すると、2つのファイルを参照し、成功した「テスト」ボタンをクリックすることができます。追加のTDSHTTPServiceコンポーネントを追加し、それをTDSCertFilesコンポーネントにリンクしました。私のサービススタートアップイベントでDSCertFiles.CertFileとDSCertFiles.KeyFileプロパティでDSServerを開始する前に2つの証明書ファイルへのパスを設定しています。サービスを開始しようとすると、私はエラーを取得する:Delphi XE2 DataSnapサーバー - HTTPSで証明書を読み込めませんでした。

Could not load certificate. error:140AD002:SSL routines:SSL_CTX_use_certificate_file:system lib

は、私が欠けているものはありますか?

+0

あなたのコードは、サービスが実際に証明書ファイルを「見る」ことができることを確認しない(それはパスかもしれませんまたは許可の問題)? – mjn

+0

こんにちは、レミーの答えに私のコメントを参照してください - コンポーネントは、設計時に設定されたパス(おそらくバグ?)で証明書を探すようです。 –

+0

ファイルが設計時に定義された場所に配置されるとすぐにエラーが消える場合、バグかどうかを確認できます。それ以外の場合、サービス環境に何か問題があります – mjn

答えて

1

エラーコード0x140AD002は、SSL_CTX_use_certificate_file()がファイルを開けなかったことを意味します。

+0

DataSnap証明書コンポーネントは、設計時にTDSCertFilesコンポーネントで指定されたパスの証明書ファイルを常に検索し、実行時にコードに設定される可能性のある新しいパスを無視するようです。 –

4

XE2とXE3によく知られたバグがあります。

この回避策を見つけました。

がTDSCertのプロパティを設定し、前がDSHTTPServerを開始し、このメソッドを呼び出した後:

DSCertFiles2.SetServerProperties(DSHTTPService2.HttpServer); //WORK AROUND 
関連する問題