--- ext/openssl/openssl.c
+++ ext/openssl/openssl.c
@@ -70,12 +70,18 @@
 #endif
 #define OPENSSL_ALGO_DSS1	5
 #if OPENSSL_VERSION_NUMBER >= 0x0090708fL
+#ifndef OPENSSL_NO_SHA256
 #define OPENSSL_ALGO_SHA224 6
 #define OPENSSL_ALGO_SHA256 7
+#endif
+#ifndef OPENSSL_NO_SHA512
 #define OPENSSL_ALGO_SHA384 8
 #define OPENSSL_ALGO_SHA512 9
+#endif
+#ifndef OPENSSL_NO_RIPEMD
 #define OPENSSL_ALGO_RMD160 10
 #endif
+#endif
 #define DEBUG_SMIME	0
 
 /* FIXME: Use the openssl constants instead of
@@ -961,22 +967,28 @@
 			mdtype = (EVP_MD *) EVP_dss1();
 			break;
 #if OPENSSL_VERSION_NUMBER >= 0x0090708fL
+#ifndef OPENSSL_NO_SHA256
 		case OPENSSL_ALGO_SHA224:
 			mdtype = (EVP_MD *) EVP_sha224();
 			break;
 		case OPENSSL_ALGO_SHA256:
 			mdtype = (EVP_MD *) EVP_sha256();
 			break;
+#endif
+#ifndef OPENSSL_NO_SHA512
 		case OPENSSL_ALGO_SHA384:
 			mdtype = (EVP_MD *) EVP_sha384();
 			break;
 		case OPENSSL_ALGO_SHA512:
 			mdtype = (EVP_MD *) EVP_sha512();
 			break;
+#endif
+#ifndef OPENSSL_NO_RIPEMD
 		case OPENSSL_ALGO_RMD160:
 			mdtype = (EVP_MD *) EVP_ripemd160();
 			break;
 #endif
+#endif
 		default:
 			return NULL;
 			break;
@@ -1072,12 +1084,18 @@
 #endif
 	REGISTER_LONG_CONSTANT("OPENSSL_ALGO_DSS1", OPENSSL_ALGO_DSS1, CONST_CS|CONST_PERSISTENT);
 #if OPENSSL_VERSION_NUMBER >= 0x0090708fL
+#ifndef OPENSSL_NO_SHA256
 	REGISTER_LONG_CONSTANT("OPENSSL_ALGO_SHA224", OPENSSL_ALGO_SHA224, CONST_CS|CONST_PERSISTENT);
 	REGISTER_LONG_CONSTANT("OPENSSL_ALGO_SHA256", OPENSSL_ALGO_SHA256, CONST_CS|CONST_PERSISTENT);
+#endif
+#ifndef OPENSSL_NO_SHA512
 	REGISTER_LONG_CONSTANT("OPENSSL_ALGO_SHA384", OPENSSL_ALGO_SHA384, CONST_CS|CONST_PERSISTENT);
 	REGISTER_LONG_CONSTANT("OPENSSL_ALGO_SHA512", OPENSSL_ALGO_SHA512, CONST_CS|CONST_PERSISTENT);
+#endif
+#ifndef OPENSSL_NO_RIPEMD
 	REGISTER_LONG_CONSTANT("OPENSSL_ALGO_RMD160", OPENSSL_ALGO_RMD160, CONST_CS|CONST_PERSISTENT);
 #endif
+#endif
 
 	/* flags for S/MIME */
 	REGISTER_LONG_CONSTANT("PKCS7_DETACHED", PKCS7_DETACHED, CONST_CS|CONST_PERSISTENT);
